View Full Version : [C] vantaggi fscanf / sgets
Ciao a tutti... In molti esercizi in cui c'è la necessità di recuperare record da file nelle soluzioni spesso trovo che si utilizza il ciclo
while ( fgets(stringa, numerocaratteri, file) =! NULL)
{ sscanf(stringa, "operatoridiconversione", destinazione)
} per prendere record da file e "spezzettarlo"???
In questo modo si salva il record del file in una stringa e successivamente si suddivide; ma a questo punto non è più comodo utilizzare direttamente
while(!feof(f))
{fscanf(file, "operatoridiconversione", destinazione)}
Si evita per esempio di fare il conteggio sul numero di caratteri che ci si aspetta... é la stessa cosa o mi perdo qualcosa ? o.O
matteo170693
04-07-2013, 09:05
è la stessa cosa, io domani ho l'esame di informatica (primo anno) al politecnico (torino) e l'esame verte proprio sul c.
il punto cruciale di solito è la lettura di un file, il metodo migliore è appunto la feof e poi usare fscanf ;)
SnakePlissken
04-07-2013, 10:01
Ciao a tutti... In molti esercizi in cui c'è la necessità di recuperare record da file nelle soluzioni spesso trovo che si utilizza il ciclo
while ( fgets(stringa, numerocaratteri, file) =! NULL)
{ sscanf(stringa, "operatoridiconversione", destinazione)
} per prendere record da file e "spezzettarlo"???
In questo modo si salva il record del file in una stringa e successivamente si suddivide; ma a questo punto non è più comodo utilizzare direttamente
while(!feof(f))
{fscanf(file, "operatoridiconversione", destinazione)}
Si evita per esempio di fare il conteggio sul numero di caratteri che ci si aspetta... é la stessa cosa o mi perdo qualcosa ? o.O
Che invece è proprio quello che devi fare, pena un buffer overflow. Se nella scanf hai solamente specificatori per interi o reali (%d %f, %u, oppure se hai stringhe di dimensione fissa %10s) allora potrebbe non fare molta differenza. Ma se stai cercando di leggere stringhe di lunghezza variabile, per esempio con scanf("%d %s", &i, buffer); allora non è affatto la stessa cosa. La gets ti fa il controllo preliminare sul numero massimo di caratteri che leggi, dopo puoi anche usare la scanf.
Oceans11
04-07-2013, 10:30
La gets ti fa il controllo preliminare sul numero massimo di caratteri che leggi.
la fgets, mi raccomando, non la gets. mai usare la gets!!
SnakePlissken
04-07-2013, 10:58
la fgets, mi raccomando, non la gets. mai usare la gets!!
Pardon! :) Certo, la fgets!
tecno789
07-07-2013, 20:13
puoi utilizzare anche :
while(!feof(file)) oppure while((ch=getc(file)!=EOF)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.