Oppure

Loading
02/09/11 10:21
Adone
Salve a tutti!
Vi pongo un'altra semplice domanda, a cui non trovo una risposta precisa.
La domanda riguarda sempre un algoritmo che conta il numero di occorrenze di una lettera in un testo. Il cuore dell'algoritmo è questo:

int main (int argc, char *argv[]){

int i=0;
int counter=0;
char s[L];
char ch='a';

for(i=0;i<=L;i++){
	s[i]=0;}

FILE *fp;

fp = fopen("testo.txt", "r");


do{
	fgets(s, L, fp);
	printf("%s",s); // questo mi serve solo per vedere se sta fgettando giusto
	for(i=0; i<=(strlen(s));i++){
		if(s[i]==ch)
			counter++;}
	}
while(feof(fp)==0);

printf("Il numero totale di a è: %d.\n", counter);
}


L'algoritmo funziona a meraviglia.
Tuttavia c'è un problema.
SE nel file testo.txt dopo l'ultima riga di testo c'è un "a capo", allora è come se il do-while facesse un giro in più e mi riconta un'altra volta l'ultima riga quindi ovviamnete il risultato viene sbagliato. Se io tolgo l'"a capo" finale dopo l'ultima riga, cioè se il cursore nel file testo.txt è posizionato subito dopo l'ultima parola dell'ultima riga allora il risultato viene perfetto. Come mai tutto ciò?
Il C è molto bello, ma mi "demoralizza" sempre per questi stupidi problemi che a volte mi fanno perdere delle ore quando il codice sembra perfetto.
aaa
02/09/11 10:26
TheKaneB
fgets si ferma ad ogni carattere di andata a capo, quindi è normale che si comporti così... il C è un linguaggio arcaico, e se vuoi usarlo devi essere cosciente del fatto che avrai sempre mille problemi a trattare le stringhe.
aaa