PDA

Visualizza la versione completa : [C] - Leggere un file una riga per volta


alfa_19
24-11-2008, 16:46
Salve,

io ho bisogno di leggere un file....7 righe per volta.

ma in pratica ad ogni ciclo io faccio 6 volte la lettura di una singola riga, quindi il problema si riduce a come leggerlo una riga per volta.

ora, io ero certo che si usasse fgets...solo che quando faccio girare il programma mi va in errore (finestrina di errore windows con la possibilità di inviare o meno).

dove sbaglio?o cosa uso se la fgets non va bene?

ecco il codice


do
{if(e != NULL)
{
if(inserisci(pl,*e)==NULL)
printf("Potrebbero esserci stati degli errori nell'inserimento in lista\n");
}
fgets(e->t , 51 , fp);
fgets(e->g , 51 , fp);
fgets(e->l , 51 , fp);
fgets(e->o , 5 , fp);
fgets(e->dx , 7 , fp);
fgets(e->dv , 101 , fp);
}
while(fgets(e->cm , 101 , fp));

menphisx
24-11-2008, 17:30
A che tipo punta e ?
Che fa inserisci ?

oregon
24-11-2008, 17:39
Ma poi ... "ti va in errore" ... in quale riga?

Puo' darsi che il problema non stia nella fgets ...

alfa_19
24-11-2008, 17:49
allora

x menphisx : giustamente non te lh'o detto xD

e è di tipo Elem che è una struct costituita da tutti vettori di char + un puntatore ad una struct Elem (ovvero il next)

inserisci : inserisce in lista il contenuto di e, ma non viene tirata un causa perchè il blocco avviene al primo ciclo, quando e è ancora inizializzata a tutti NULL

----------

x oregon : il problema è la fgets perchè se metto un breakpoint appena sopra, il programma arriva al breakpoint....se lo metto appena sotto no.

ovviamente si verifica sulla prima fgets perchè poi le altre sono uguali

menphisx
24-11-2008, 17:58
Forse fa in overflow, controlla che le dimensioni dei vettori corrispondano al numero di caratteri letti ...
Se magari posti la dichiarazione del tipo Elem, e l'errore che ti da windows te ne sarei grato :zizi:

alfa_19
24-11-2008, 19:01
per l'overflow no di sicuro perchè sto leggendo delle righe che sono di circa una ventina di caratteri (in riferimento alla prima fgets che tanto da già problemi)....se centra aggiungo che la riga contiene spazi

ora un attimo che posto anche l'errore di windows

oregon
24-11-2008, 19:32
Non e' che il campo

t

della struttura e' dimensionato con

char t[50];

?

In questo caso, scrivere 51 puo' creare problemi se la linea e' molto lunga (se ci sono degli spazi, puo' darsi che non ti rendi conto di quanto sia lunga) ...

alfa_19
25-11-2008, 09:48
no è dimensionato con 51.

devo mettere 50 all'interno del fgets?

oregon
25-11-2008, 10:00
Va bene che siano uguali.

Pero', in questo caso, l'errore e' strano ... mi sa proprio che avviene per un motivo non legato alla fgets ...

Per capire in maniera definitiva, servirebbero le informazioni che ti sono state chieste e che hai detto che inviavi (la struttura ? l'errore ?). Se puoi, anche uno zip con il file che viene letto e il source (il progetto) per effettuare il debug ...

alfa_19
25-11-2008, 12:06
ma no è il classico errore di windows dove ti viene chiesto se vuoi inviare la segnalazione dell'errore

Loading