PDA

View Full Version : fscanf che non funziona


Amk
15-01-2005, 09:22
non riesco a capire perchè con questo frammento non riesco a stampare a video il file:

if (voti[i] >= media)
{
fprintf(fp,"%d\n",voti[i]);
++totale;
}

printf("I voti superiori alla media sono stati %d\n\n",totale);

fseek(fp,0,0);
while (fscanf(fp, "%d",&stampa)!= EOF)
printf("%d\n",stampa);




QUESTO FUNZIONA:

if (voti[i] >= media)
{
fprintf(fp,"%d\n",voti[i]);
++quanti;
printf("Il %d^ voto (%d) e' stato superiore o uguale alla media\n", i+1, voti[i]);
}

printf("I voti superiori alla media sono stati %d\n\n",quanti);



Ma per quale motivo la scanf non mi scansione niente nel primo caso? Sarà una cazzata ma non trovo la soluzione...

Amk
15-01-2005, 09:23
ho dimenticato di mettere [C] nel titolo,
riferito al linguaggio C.

Ziosilvio
15-01-2005, 10:22
Originariamente inviato da Amk
fscanf(fp, "%d",&stampa)!= EOF
Questo accadrà praticamente sempre.
EOF è una costante corrispondente a -1, e il valore restituito da fscanf è pari al numero di conversioni di argomenti effettuate: quindi, se non riesce a leggere un valore intero dal file, fscanf(fp,"%d",&stampa) deve restituire 0 e non EOF.
Per il resto, potresti sostituire fseek(fp,0,0) con rewind(fp).

sirus
15-01-2005, 14:11
prova a fare una cosa di questo tipo:

...

while((stampa=fgetc(fp))!=EOF) ;) //così dovrebbe funzionare

...

un consiglio quando uso la fseek, invece di mettere nell'ultimo parametro la cifra corrispondente all'operazione (inizio,fine o attuale) usa le costanti standard SEEK_END,SEEK_CUR e SEEK_SET tt per questione di portabilità ;)

Amk
15-01-2005, 20:08
grazie

In effetti con fseek o rewind funziona, il problema ulteriore è che non avevo aperto il file con "w+" ma solo con "w" e fscanf non scansionava niente perchè non poteva leggere da file.



Grazie per l'assistenza.
ciao

sirus
15-01-2005, 20:12
cmq non ha senso mettere una fscanf li, è una cosa impossibile, la mia prof di informatica ha dato 2 ad un mio compagno di classe per una cosa del genere :sofico: