20/08/11 12:39
Adone
Buongiorno a tutti,
e complimenti per la community.
Vengo subito al dunque con una domanda che per molti di voi sarà sicuramente semplice, credo
In pratica stavo scrivendo un codice semplicissimo il cui scopo era conteggiare quante volte una determinata lettera (per esempio la "c" è presente in un file di testo. Il cuore dell'algoritmo sarebbe questo:
In pratica lo sscanf scanfa cararattere per carattere ogni riga del file di testo precedentemente fgettata, e controlla ogni carattere con k che è una variabile dichiarata in precedenza che contiene la lettera che si vuole contare. Ad esempio se k='c' allora ad ogni c trovata nel file testo.txt verrà incrementato counter. Tuttavia c'è un problema, il codice mi conta sempre un numero sbagliato, allora ho provato a far printare ogni parte del codice per vedere cosa succede e ho scoperto che lo sscanf resta fermo!!! Nel senso che quando fgets fgetta di volta in volta una riga del testo.txt sscanf invece di scanfare carattere per carattere tutta la riga finchè j<=strlen(s) cioè finchè la riga non termina in pratica, continua a scanfare la PRIMA LETTERA della riga tante volte finchè j<=strlen(s) O_o! Cioè continua a girare sulla prima lettera! Quindi se per esempio io sto cercando la lettera c e ho ho un file di testo fatto così:
ciao
pippo
ciao ciao
lo scanf solo alla prima riga mi conterà ben 4 c! Perchè strlen(s) della prima riga è = a 4, e lo scanf essendo fermo sulla prima lettera continuerà a contare la c e ad incrementare il contatore. Come mai?!!!!! Come faccio a falro andare avanti?
Vi ringrazio in anticipo
e complimenti per la community.
Vengo subito al dunque con una domanda che per molti di voi sarà sicuramente semplice, credo
In pratica stavo scrivendo un codice semplicissimo il cui scopo era conteggiare quante volte una determinata lettera (per esempio la "c" è presente in un file di testo. Il cuore dell'algoritmo sarebbe questo:
FILE *fp; fp = fopen ("testo.txt","r"); do{ fgets(s, L, fp); for(j=0;j<=strlen(s);j++){ sscanf(s, "%c", &c); //scanfa carattere per carattere if(c==k){ //compara il carattere corrente c con la variabile k counter++;} } } while(feof(fp)==0);
In pratica lo sscanf scanfa cararattere per carattere ogni riga del file di testo precedentemente fgettata, e controlla ogni carattere con k che è una variabile dichiarata in precedenza che contiene la lettera che si vuole contare. Ad esempio se k='c' allora ad ogni c trovata nel file testo.txt verrà incrementato counter. Tuttavia c'è un problema, il codice mi conta sempre un numero sbagliato, allora ho provato a far printare ogni parte del codice per vedere cosa succede e ho scoperto che lo sscanf resta fermo!!! Nel senso che quando fgets fgetta di volta in volta una riga del testo.txt sscanf invece di scanfare carattere per carattere tutta la riga finchè j<=strlen(s) cioè finchè la riga non termina in pratica, continua a scanfare la PRIMA LETTERA della riga tante volte finchè j<=strlen(s) O_o! Cioè continua a girare sulla prima lettera! Quindi se per esempio io sto cercando la lettera c e ho ho un file di testo fatto così:
ciao
pippo
ciao ciao
lo scanf solo alla prima riga mi conterà ben 4 c! Perchè strlen(s) della prima riga è = a 4, e lo scanf essendo fermo sulla prima lettera continuerà a contare la c e ad incrementare il contatore. Come mai?!!!!! Come faccio a falro andare avanti?
Vi ringrazio in anticipo
Ultima modifica effettuata da Adone 20/08/11 12:41
aaa