streams und eof
-
Hallo zusammen
wie teste ich ein ASCII file, ob ueberhaupt etwas drin steht? Denn mein jetziger Code schreibt mir in meinen vector auf jeden Fall etwas rein, da die Schleife immer einmal durchlaufen wird. Ich moechte aber, dass der vector leer bleibt wenn das file leer ist. Wie mache ich das? Das geht doch bestimmt irgendwie mit fail, oder?
Hier mein Code:
vector<PointN> loadMarkers(char* sData) { FILE * markers = NULL; markers = fopen(sData,"r"); if (!markers) { printf("Could not open file"); //return(-1); } vector<PointN> vec_markpoints; float float0=0.,float1=0.,float2=0.; while(!feof(markers)) { //if(ios::fail(markers) == false) //{ fscanf(markers,"%f",&float0); fscanf(markers,"%f",&float1); fscanf(markers,"%f",&float2); PointN p((double)float0,(double)float1,(double)float2); vec_markpoints.push_back(p); //} } fclose(markers); return vec_markpoints; }
-
setz' mal vor das PointN p(...); die Zeile "if(feof(markers)) break;", damit verlässt du die Schleife vorzeitig, wenn nichts in der Datei stand.
(PS: Wieso nutzt du eigentlich keine fstreams?)
-
EOF wird erst gesetzt nachdem du das erste mal aus dem stream gelesen hast.
Du musst den Rückgabewert von fscanf auswerten.
z.Bint read_ok = 1; while(read_ok) { read_ok = ( fscanf(markers,"%f",&float0) == 1 ); ... }Kurt
EDIT: So wie CStoll sagt geht's natürlich auch. Du bekommst aber Probleme wenn in der Datei was anderes als floats ( ints ) steht.