View Full Version : [C] problema con fscanf
C-noobprogrammer
24-01-2009, 14:21
.
Utilizza fgets per leggere una riga:
http://www.cplusplus.com/reference/clibrary/cstdio/fgets.html
Dopo puoi usare strtok per dividere la stringa: http://www.cplusplus.com/reference/clibrary/cstring/strtok.html
Poi usa strcpy per copiare i vari elementi nella tua struttura.
C-noobprogrammer
24-01-2009, 16:47
ci avevo pensato di mettere riga x riga in una stringa (e poi stidiarla, magari con un while s[i] != ',' per analizzare i pezzi fino alla virgola)... sarebbe proprio quello che vorrei, ma c'è un problema...la fgets incorre in un difetto se il file termina con '\n': non trovando niente, ripete il contenuto della lettura precedente.
altra cosa: diciamo k faccio così con la fgets. dovrei in qualche modo salvare il contenuto di ogni riga in una stringa diversa, e non sapendo quante righe ho non è che posso dichiarare tutte le stringhe all'inizio....
Non devi memorizzare tutte le righe, ma solamente una alla volta, quindi devi dichiarare una stringa sola per contenere una riga. A questo punto la spezzetti, la memorizzi nella tua struttura dati e passi alla riga successiva.
Per evitare che ti faccia una lettura doppia fai:
while(1) /*è un ciclo infinito */
{
fgets(...);
if(feof(f))
break; /* se abbiamo raggiunto la fine del file usciamo */
/* qui elabori e spezzetti la stringa */
}
C-noobprogrammer
24-01-2009, 17:17
hai ragione, non ci avevo pensato ;)
introduco in contatore all'interno del ciclo while(fgets(..) != EOF) e con questo assegno riga per riga i valori nei vettori di struct.
Grazie mille per l'aiuto, e soprattutto per la tempestività.
C-noobprogrammer
24-01-2009, 17:24
ultima cosa, non sono molto pratico della fgets:
come gestisco il fatto che devo passarle anche la dimensione della stringa?
io non so quanti caratteri possono esserci in una riga del file..
Gli passi la dimensione MASSIMA, non il numero dei caratteri. La dimensione massima corrisponde alla dimensione del buffer che usi per memorizzare la stringa.
C-noobprogrammer
24-01-2009, 17:34
allora perfetto :)
grazie mille ancora
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.