PDA

View Full Version : [C] problema con fscanf


C-noobprogrammer
24-01-2009, 14:21
.

cionci
24-01-2009, 14:58
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....

cionci
24-01-2009, 17:02
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..

cionci
24-01-2009, 17:30
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