Oppure

Loading
16/07/14 18:10
swet
Salve ragazzi, tra non molto dovrò affrontare un' esame sulla programmazione in C.
Il testo chiede di inserire delle sequenze di caratteri e quindi di trovare la parola più lunga tra quelle inserite.
Non bisogna usare array o funzioni stringa.

Di seguito il codice scritto da me:

#include <stdio.h>
/*testo di esame del 16/01/2014*/ 

int main(){
printf("Benvenuto nel programma\n");
printf ("Inserisci una sequenza di caratteri\n");
int numerospazi,parola1,parola2,parolapiulunga; //contatori
//inizializzo i contatori
parolapiulunga=0;
numerospazi = 0;
parola1=0;
parola2=0;
// dichiaro la variabile che conterrà il carattere letto dalla getchar()
char c ;
do{
	//leggo il carattere
	c=getchar();
	//incremento il contatore di parola1
	parola1++;
	// se viene premuta la barra spaziatrice 
	if (c==32 && c!=10){// c!=10 serve per evitare l'echo generato dalla getchar()
	//incremento il contatore degli spazi
		numerospazi++;
	//routine per la seconda parola
		do {
		//leggo il carattere
		c=getchar();
		//incremento il contatore di parola2
		parola2++;}
		// fin quando non viene premuta nuovamente la barra spaziatrice
		while(c!=32 );
		
		//incremento il contatore degli spazi
	numerospazi++;
		// confronto le parole inserite per determinare la più lunga
	if (parola2 > parola1 ){
		if (parola2>parolapiulunga)
			parolapiulunga=parola2;
			
			
	}else
	if(parola1 > parola2 ){
		if (parola1>parolapiulunga)
			parolapiulunga=parola1;	
			
	}
	parola1=0;
	parola2=0;
	}

}
// L' input termina quando viene generato il segnale EOF ctrl+z
while (c!=EOF);
// stampo a video i risultati
printf("Hai inserito %d numero di spazi\n",numerospazi);
printf("La parola piu' lunga contiene %d caratteri\n",parolapiulunga);
//programma terminato correttamente
return 0;
}


Non riesco ad ottenere il numero di caratteri che contengono la parola più lunga, infatti , al termine dell' esecuzione :
parolapiulunga=numeri apparentemente casuali.

invece che mostrare la parola più lunga inserita
Sicuramente è un errore stupido ma non ne esco!

Grazie
aaa
18/07/14 21:51
pierotofy
Non ti serve tenere traccia della seconda parola. Tieni solamente traccia della lunghezza della parola piu' lunga inserita fino ad ora.

int maxLength = 0;
// ...
if (parola1 > maxLength) maxLength = parola1;


Ti semplifichera' il do-while di un bel po'.
Il mio blog: piero.dev
19/07/14 12:45
swet
Grazie!!! Avevo risolto alla fine , ma con la tua soluzione risparmio un bel po di codice inutile!

aaa