Ich habe eine harte Zeit mit einer Do-While-Schleife, die stoppen soll, wenn wir das Ende der Datei erreichen. Hier ist der Schleifencode:Wie verwende ich feof (FILE * f)?
do {
if (pcompanyRow[0] != '#' && pass == 1) {
strtok(pcompanyRow, ":");
pcompanyName = strcpy(pcompanyName, strtok(NULL, ""));
pass = 2;
fgets(pcompanyRow, 1024, f);
}
if (pcompanyRow[0] != '#' && pass == 2) {
strtok(pcompanyRow, ":");
pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , ""));
pass = 3;
fgets(pcompanyRow, 1024 , f);
}
if (pcompanyRow[0] != '#' && pass == 3) {
strtok(pcompanyRow, ":");
pcompanyMMSPrice = strcpy(pcompanyMMSPrice, strtok(NULL, ""));
pass = 4;
fgets(pcompanyRow, 1024, f);
}
if (pass == 4) {
AppendCompanyNode(pcompanyList, pcompanyName, pcompanySMSPrice, pcompanyMMSPrice);
pass = 1;
}
} while (!feof(f));
Nachdem mit dem Debugger ausgeführt wird, bemerkte ich, dass alle Crash-Probleme, die ich habe, weil es nicht aus dieser Schleife geht, auch wenn es die ganzen Linien erreicht.
Wie soll ich es richtig schreiben?
Wie die Antworten sagen, ist die prägnante Antwort "Sie verwenden nicht feof()". Das einzige Mal, wenn Sie 'feof()' verwenden, ist, wenn Sie eine Fehler-oder-EOF-Angabe von einer primären Eingabefunktion erhalten (z. B. "fgets()") und Sie entscheiden, zwischen EOF und einem Fehler zu unterscheiden. Meistens machen sich die meisten Leute nicht die Mühe, zwischen den beiden zu unterscheiden (ich speziell, aber den größten Teil des Codes, den ich gesehen habe). Ich kann mich nicht erinnern, 'feof()' überhaupt zu benutzen - was bedeutet, dass ich es wahrscheinlich ein paar Mal im letzten Vierteljahrhundert der C-Programmierung benutzt habe. –
@ Jonathan: Ich denke, es ist viel sinnvoller, 'ferror (f)' als '' feof (f) 'zu überprüfen, wenn Sie wissen wollen, ob ein Fehler aufgetreten ist. Manchmal ist 'feof' in Do-While-Loops nützlich, aber ich stimme zu, dass es meistens ziemlich nutzlos ist. –
@R ..: Ja, es macht mehr Sinn, 'ferror()' als 'feof()' zu benutzen, aber ich gestehe, dass ich das auch nicht oft benutze. Aber ich hätte das in meinem Kommentar sagen sollen - oder einen zweiten hinzugefügt, da mir der Platz ausging. –