|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 18
|
[C] problema con fscanf
.
Ultima modifica di C-noobprogrammer : 26-01-2009 alle 23:48. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Utilizza fgets per leggere una riga:
http://www.cplusplus.com/reference/c...dio/fgets.html Dopo puoi usare strtok per dividere la stringa: http://www.cplusplus.com/reference/c...ng/strtok.html Poi usa strcpy per copiare i vari elementi nella tua struttura. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 18
|
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.... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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: Codice:
while(1) /*è un ciclo infinito */
{
fgets(...);
if(feof(f))
break; /* se abbiamo raggiunto la fine del file usciamo */
/* qui elabori e spezzetti la stringa */
}
Ultima modifica di cionci : 24-01-2009 alle 18:06. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 18
|
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à. |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 18
|
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.. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Gli passi la dimensione MASSIMA, non il numero dei caratteri. La dimensione massima corrisponde alla dimensione del buffer che usi per memorizzare la stringa.
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 18
|
allora perfetto
grazie mille ancora |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:03.


















