[Risolto]Conta vocali,consonanti e alfanumerici in file[C]
Ragazzi perchè questa parte di codice mi da segmentation fault? Come da titolo, devo contare quante vocali,consonanti e caratteri alfanumerici sono contenuti in un file....
void conta_vocali_consonanti_alfanumerici(FILE* file_ingresso, int* vet){ char car; int i; for(i=0;i<3;i++) vet[i]=0; while((car = getc(file_ingresso)) != EOF) { if(car == 'a' || car == 'e' ||car == 'i' ||car == 'o' ||car == 'u') vet[0]++; else if(car == 'A' || car == 'E' ||car == 'I' ||car == 'O' ||car == 'U') vet[0]++; else if((car >= 00 && car <= 64) || (car >= 91 && car <= 96) || (car >= 123 && car <= 127)) vet[1]++; else vet[2]++; } }
Risposte
Ho risolto il problema del segmentation fault, però ora ho un altro problema! In pratica, il compilatore non entra nei vari cicli if e quindi il valore degli elementi del vettore è zero. Mi potete dare una mano.
Nessuno mi sa dare una mano?
Hai provato ad inserire una stampa del vettore prima di uscire dalla funzione scritta sopra? Che succede? È il vettore che vorresti riuscire a stampare anche dal main() o è sempre vuoto?
Si ci ho provato ma risulta sempre vuoto. Secondo me, infatti, non entra nei vari cicli e non capisco il motivo.
Se sei sicuro che stampando il vettore prima di uscire ti stampi sempre un vettore nullo, allora prova a vedere qual è il valore di car ad ogni estrazione, per esempio.
// ... while((car = getc(file_ingresso)) != EOF) { if(car == 'a' || car == 'e' ||car == 'i' ||car == 'o' ||car == 'u') vet[0]++; // ... vet[1]++; else vet[2]++; printf ("DEBUG : \"car\" is now == %c \n", car) } } return;
L'ho fatto. Non mi entra nel ciclo while. Se metto la stringa che mi hi consigliato tu fuori dal ciclo while allora me la stampa, altirmenti no!
"fk16":
L'ho fatto. Non mi entra nel ciclo while. Se metto la stringa che mi hi consigliato tu fuori dal ciclo while allora me la stampa, altirmenti no!
Be', almeno cominciamo a capire qualcosa.
Non è che il file risulta vuoto e l'EOF viene impostato subito?
Io proverei qualcosa del tipo:
// ... // We're going to extract // the first two char's: int i; for(i = 0; i < 2; ++i) { char tmp_byte; tmp_byte = getc(file_ingresso); if(tmp_byte != EOF) printf ("\"tmp_byte\" == %c \n", tmp_byte); else printf ("Reached the end of file. \n"); } while((car = getc(file_ingresso)) != EOF) { if(car == 'a' || car == 'e' ||car == 'i' ||car == 'o' ||car == 'u') vet[0]++; // ... vet[1]++; else vet[2]++; printf ("DEBUG : \"car\" is now == %c \n", car) } } return;
Cosa succede? Viene stampato "Reached the end of file"?
Hai centrato il bersaglio! Mi viene stampata quella stringa. Però, non capisco il perchè di questa cosa, il file che ho passato non è vuoto!
Sono riuscito a risolvere il problema! In partica oltre a questa funzione, ne avevo fatta un altra per stampare il contenuto del file di testo. Alla fine di quella funzione, il puntatore a FILE puntava all'ultimo elemento del file stesso (quindi EOF). Allora, mi è bastato usare rewind(nome_file) per far puntare al puntatore la prima parola del file.
Comunque ti ringrazio tantissimo dell'aiuto!
Comunque ti ringrazio tantissimo dell'aiuto!
"fk16":
Sono riuscito a risolvere il problema! In partica oltre a questa funzione, ne avevo fatta un altra per stampare il contenuto del file di testo. Alla fine di quella funzione, il puntatore a FILE puntava all'ultimo elemento del file stesso (quindi EOF). Allora, mi è bastato usare rewind(nome_file) per far puntare al puntatore la prima parola del file.
Ah, capisco!
Comunque ti ringrazio tantissimo dell'aiuto!
E' stato un piacere in realtà!
