Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    30

    Problema con le stringhe

    Ciao a tutti ho un prblema con questo codice...dovrei prendere in input due parole e poi vedere se la seconda è l'inverso della prima. Dovrebbe presentarsi in questo modo:
    Inserire la prima parola:ciao

    Inserire la seconda parolaaic

    La seconda parola è l'inverso della prima

    Vuoi terminare il programma (y o n)?

    se digito y si deve fermare il rpogramma sennò deve continuare, nel caso la seconda non sia l'inverso della prima deve scrivere

    La seconda parola è l'inverso della prima

    Nel codice che ho scritto ho creato due funzioni una per prendere in input le stringhe e stampare se è o meno l'inverso e l'altra funzione invece per vedere se la seconda è l'inverso della prima.
    I problemi che mi compaiono è che anche se inserisco una parola che sia l'inverso dell'altra mi stampa sempre la seconda risposta ovvero che non è l'inverso.
    Inoltre alla domanda se voglio terminare e io dico che voglio smettere lui ricomincia lo stesso, chiedendomi di inserire la seconda parola e saltando di chiedermi la prima................
    Questo è il codice:
    codice:
    /*Scrivere un programma che chieda all'utente di inserire due parole e che dia*
     *come risultato se l'una è l'inverso dell'altra*/
    #include<stdio.h>
    #include<string.h>
    
    #define N 20
    
    void inserparole();
    int risultato_test(char [], char []);
    
    int main(){
    	int m;
    	char risp;
    	do{
    		inserparole();
    		printf("Vuoi terminre il programma (y o n)?\n");
    		scanf("%c", &risp);
    		if((int)risp==121)
    			m = 0;
    		else //if(risp=='n')
    			m = 1;
    	}while(m = 1);
    }
    
    void inserparole(){
    	char primaparola[N];
    	char secondaparola[N];
    	int i = 0;
    	int j = 0;
    	int ris;
    	printf("Inserire la prima parola: ");
    	fgets(primaparola, sizeof(primaparola), stdin);
    	printf("\n");
    	while(i==strlen(primaparola))
    	{
    		if(primaparola[i]=='\n')
    			primaparola[i]='\0';
    		i++;
    	}
    	printf("Inserire la seconda parola: ");
    	fgets(secondaparola, sizeof(secondaparola), stdin);
    	printf("\n");
    	while(j==strlen(secondaparola))
    	{
    		if(secondaparola[j]=='\n')
    			secondaparola[i]='\0';
    		j++;
    	}
    	ris = risultato_test(primaparola, secondaparola);
    	if(ris==0)
    		printf("la seconda parola è l'inverso della prima\n");
    	else
    		printf("la seconda parola non è l'inverso della prima\n");
    	fflush(stdin);
    }
    
    int risultato_test(char a[], char b[])
    {	
    	int x, ris,m;
    	m=strlen(b);
    	char inverso[m];
    	for(x=0; x<m-1; x++)
    		inverso[x]=b[m-1-x];
    	ris = strcmp(a, inverso);
    	return ris;
    }

  2. #2
    In inserparole fai:
    codice:
    while(i==strlen(primaparola))
    ...
    ...
    while(j==strlen(secondaparola))
    ...
    ...
    Al posto di quel '==' penso che tu volessi mettere '<' altrimenti mi sfugge il senso (non entra mai nel ciclo!).

    In risultato_test fai:
    codice:
    for(x=0; x<m-1; x++)
    ...
    Attento: devi mettere 'x < m', altrimenti salti il carattere finale.

    Per il fatto che non termina, prova ad aggiungere la riga in grassetto nel main:
    codice:
    do{
    		inserparole();
                    while (getchar() != 10); // "mangia" i caratteri spuri rimasti nello stdin;
    		printf("Vuoi terminre il programma (y o n)?\n");
    		scanf("%c", &risp);
    		if((int)risp==121)
    			m = 0;
    		else //if(risp=='n')
    			m = 1;
    	}while(m = 1);

    Ci potrebbero essere altre cose che mi sfuggono, ti consiglio di fare qualche stampa di verifica (ad esempio sulle stringhe inserite!) per sicurezza! Dimmi come va!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: Problema con le stringhe

    Originariamente inviato da Heroes7
    Inoltre alla domanda se voglio terminare e io dico che voglio smettere lui ricomincia lo stesso [...]
    codice:
            ...
    	}while(m = 1);
            ...
    rivediti quella condizione tanto per cominciare.
    every day above ground is a good one

  4. #4

    Re: Re: Problema con le stringhe

    Originariamente inviato da YuYevon
    rivediti quella condizione tanto per cominciare.
    Eh per l'appunto c'erano altre cose che mi sfuggivano
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    30
    grazie mille per le risposte!! il codice però non funziona comunque.....ho inserito dei vari printf in giro per vedere dov'era l'errore e in pratica nella funzione che deve comparare le stringhe non va molto bene.
    Ovvero: se io inserisco ciao come prima parola, come seconda oaic che è il suo inverso e le passavo alla funzione risultato_test andava tutto bene... fino al momento in cui si crea una stringa nella quale rovesciavo la seconda parola (quindi da oaic a ciao)per poi farne strcmp.
    Il problema o meglio la cosa strana è che ho inserito svariati printf per vedere la lunghezza delle stringhe se c'erano errori..e a seconda che mettessi o meno una printf mi diceva che la lunghezza di inverso era più lunga o più corta di una
    codice:
    int risultato_test(char a[], char b[])
    {	
    	int x, ris,m;
    	m=strlen(b);
    	printf("%d", m); // se io tolgo questa printf mi dice che inverso è lungo 5 se lo lascio mi dice che è lungo 4
    	char inverso[m];
    	for(x=0; x<m; x++)
    		inverso[x]=b[m-1-x];
    	printf("%s %d\n", inverso, strlen(inverso));
    	printf("%s\n", a);
    	ris = strcmp(a, inverso);
    	printf("%d\n", ris);
    	return ris;
    }
    Si ripresenta poi comunque un altro problema. Quando mi chiede se voglio continuare mi stampa:
    Inserire la prima parola:
    0
    Inserire la seconda parola:

    ovvero non mi fa inserire la prima parola e mi fa inserire solo la seconda..
    Avete qualche consiglio da darmi?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Alcune correzioni in rosso

    codice:
    int main(){
    	int m;
    	char risp;
    	do{
    		inserparole();
                    while (getchar() != 10);
    		printf("Vuoi terminare il programma (y o n)? ");
    		scanf("%c", &risp);
    		if(risp=='y')
    			m = 0;
    		else //if(risp=='n')
    			m = 1;
    		while (getchar() != 10);
    	}while(m == 1);
    }
    
    void inserparole(){
    	char primaparola[N];
    	char secondaparola[N];
    	int i = 0;
    	int j = 0;
    	int ris;
    	printf("Inserire la prima parola: ");
    	fgets(primaparola, sizeof(primaparola), stdin);
    	printf("\n");
    	while(i<strlen(primaparola))
    	{
    		if(primaparola[i]=='\n')
    			primaparola[i]='\0';
    		i++;
    	}
    	printf("Inserire la seconda parola: ");
    	fgets(secondaparola, sizeof(secondaparola), stdin);
    	printf("\n");
    	while(j<strlen(secondaparola))
    	{
    		if(secondaparola[j]=='\n')
    			secondaparola[j]='\0';
    		j++;
    	}
    	ris = risultato_test(primaparola, secondaparola);
    	if(ris==0)
    		printf("la seconda parola è l'inverso della prima\n");
    	else
    		printf("la seconda parola non è l'inverso della prima\n");
    }
    
    int risultato_test(char a[], char b[])
    {	
       int x, ris,m;
       m=strlen(b);
       char inverso[m];
       for(x=0; x<m; x++)
          inverso[x]=b[m-1-x];
       inverso[m]='\0';
       ris = strcmp(a, inverso);
       return ris;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    30
    GRazie mille per l'aiuto ora funziona perfettamente!!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Di nulla ... spero tu abbia compreso i problemi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9

    Re: Problema con le stringhe

    Originariamente inviato da Heroes7
    codice:
    	}while(m = 1);
    Eccolo per l'ennesima volta! che sia mai un assegnamento per sbaglio?

    Tranquillo, è il più diffuso e subdolo errore di programmazione. Per risolverlo per sempre ed in qualunque linguaggio, basta porre nei confronti la costante a sinistra ;-)

    Ancora un assegnamento per sbaglio?

    Corollario: chi non mette la costante a sinistra nei confronti, in qualunque linguaggio e sistema operativo, prima o poi effettuerà un non voluto assegnamento anziché un confronto! Con conseguenze che in genere possono essere catastrofiche.

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.