PDA

Visualizza la versione completa : [C] Lettura da file


lmweb.it
29-12-2008, 17:41
Ho da poco iniziato a programmare in c ed ho scelto come comilatore Dev c
Avevo intenzione di leggere da file una serie di numeri ed ho scritto il seguente programma:

#include<stdio.h>
#include<stdlib.h>
//programma che legge da file

int main (){
int a=0;
FILE *fd;
fd=fopen("prova.txt","r");
if(!fd) printf ("File non aperto. Il programma non puo' proseguire\n");
else{
while(!EOF){
fscanf(fd,"%i",&a);
printf("%i \n",a);
}
}
system ("pause");
return 0;
}


il file che presenente nella stessa cartella prova.txt e formato da tutti numeri uno sotto l'altro per quando lancio il programma non mi comparono i numeri inseriti nel file dove sbaglio??? :dh: :dh: :dh:

MacApp
29-12-2008, 17:52
!EOF sempre falso quindi non entra neppure una volta nel corpo del while.

lmweb.it
29-12-2008, 17:53
ma se tolgo il punto esclamativo non si ferma mai mi mostra sempre l'ultimo elemento

MacApp
29-12-2008, 18:11
Originariamente inviato da lmweb.it
ma se tolgo il punto esclamativo non si ferma mai mi mostra sempre l'ultimo elemento

Sicuro che sia sempre l'ultimo elemento?

Hai letto la documentazione sul valore restituito dalla "fscanf"?
;-)

lmweb.it
29-12-2008, 18:15
io non riesco a capire come mai si sono sicuro mi restituisce sempre l'ultimo elemento. Non esce mai dal while

MItaly
29-12-2008, 18:38
Per verificare se sei giunto alla fine del file usa feof(fd); EOF una macro che non c'entra.

sotoli
29-12-2008, 18:39
Attenzione....EOF una costante, se scrivi

while(EOF)
non uscir mai dal ciclo e se scrivi

while(!EOF)
non ci entra mai.

Prova a guardarti questa (http://www.cplusplus.com/reference/clibrary/cstdio/feof.html) funzione. :)

MacApp
30-12-2008, 11:39
Originariamente inviato da lmweb.it
io non riesco a capire come mai si sono sicuro mi restituisce sempre l'ultimo elemento. Non esce mai dal while

A me il tuo programmino (sostituendo !EOF con EOF) con il seguente file:

"prova.txt"


5 4 3 2 1


produce:


$ ./a.out
5
4
3
2
1
1
1
1
1

quindi continua ad infinitum a scrivere 1. Forse tu non riesci a leggere le prime righe del tuo output.

In ogni modo, puoi capire se si giunti a fine file, controllando il valore restituito dalla fscanf, od utilizzando la feof.

Loading