Hören Sie auf, fscanf zum Lesen von Textdateien zu verwenden. Es ist eine Falle. Wenn Ihre Daten nicht bis zum letzten Leerzeichen perfekt formatiert sind, wird fscanf verstopfen, falsch ausgerichtet sein und das Debuggen zu einem Albtraum machen. Der zuverlässige Weg? Öffnen Sie im „r“-Modus, verwenden Sie fgets, um ganze Zeilen zu erfassen, und analysieren Sie anschließend die benötigten Teile.
Dies ist die unkomplizierte Möglichkeit, eine Datei zu lesen und ihren Inhalt auf dem Bildschirm anzuzeigen, ohne dass Ihr System abstürzt.
„c
int main() {
DATEI *f;
char s[1000];
f=fopen(“infile”,”r”);
if (!f) return 1;
while (fgets(s,1000,f)!=NULL)
printf(“%s”,s);
fclose(f);
0 zurückgeben;
}
„
Die Logik hier ist täuschend einfach. fgets liest eine Zeile mit bis zu 1.000 Zeichen in diesem Puffer und gibt nur dann „NULL“ zurück, wenn sie die Dateiende-Markierung erreicht. Es druckt über „printf“ direkt nach stdout. Ist Ihnen das Fehlen von „\n“ in der Formatzeichenfolge „printf“ aufgefallen? Das ist Absicht. fgets hängt das Zeilenumbruchzeichen automatisch an das Ende der gelesenen Zeichenfolge an. Wenn Sie Ihr eigenes „\n“ hinzufügen, erhalten Sie den doppelten Abstand. Noch wichtiger ist, dass fgets den Zeilenumbruch nicht hinzufügt, wenn eine Zeile länger als 1.000 Zeichen ist. Sie können diesen unvollständigen Lesevorgang erkennen, indem Sie nach dem fehlenden „\n“ suchen. Dies ist ein praktischer Trick, wenn Sie mit fehlerhaften Daten arbeiten.
„Verwenden Sie fgets, um jede Zeile einzulesen und dann die benötigten Teile auszulesen.“
Es gibt einen kritischen Fehler, der selbst erfahrene Entwickler aus der Fassung bringt. Geben Sie fclose nicht als close ein. Der Compiler wird es nicht abfangen. Die Funktion „Schließen“ existiert, und für kleine Skripte, die eine Datei nur ein- oder zweimal öffnen und schließen, scheint sie gut zu funktionieren. Es ist eine Lüge.
Wenn Sie dies innerhalb einer Schleife ausführen, werden durch „Schließen“ die zugrunde liegenden Dateiressourcen nicht ordnungsgemäß freigegeben. Irgendwann hat Ihr Programm keine verfügbaren Datei-Handles oder keinen Speicherplatz mehr und stürzt schwer ab. „fclose“ ist die einzig richtige Möglichkeit, die Tür zu schließen. „Schließen“ ist eine Abkürzung, die zu einem Ziegelstein führt. Bleiben Sie bei der Standardbibliothek. Halten Sie Ihre Puffer überprüft. Lassen Sie nicht zu, dass ein Tippfehler Ihr Gedächtnis frisst.
























