Warum ist (foobarx) vorzuziehen (! foobar.eof ()) [duplizieren]

8

Mein Lehrer sagte, wir sollten EOF nicht verwenden, um Textdatei- oder binäre Dateiinformationen einzulesen, stattdessen sollten wir (afile & gt; & gt; x) verwenden. Er hat nicht erklärt warum, kann mir jemand erklären. Kann jemand auch erklären, was die Unterschiede in dieser zwei verschiedenen Methode des Lesens

sind %Vor%     
Computernerd 15.01.2013, 03:39
quelle

1 Antwort

13

Weil die Datei nicht am Ende ist, bevor Sie versuchen, von ihr zu lesen.

operator>> liefert einen Verweis auf den Stream in dem Zustand nachdem der Lesevorgang versucht wurde und entweder erfolgreich oder fehlgeschlagen ist und der Stream als true ausgewertet wird, wenn er erfolgreich war oder false wenn es fehlgeschlagen ist. Das Testen auf eof() first bedeutet, dass die Datei keine nützlichen Daten enthalten kann, aber noch nicht EOF sein kann. Wenn Sie von ihr lesen, liegt sie bei EOF und der Lesevorgang schlägt fehl.

Ein weiteres wichtiges Detail ist, dass operator>> für Streams alle führenden Whitespaces überspringt, keine nachgestellten Whitespaces. Deshalb kann eine Datei nicht vor dem Lesen auf EOF sein und nach einem Lesevorgang auf EOF sein.

Darüber hinaus funktioniert das erstere, wenn die nächsten Daten in der Datei Daten sind, die nicht in eine ganze Zahl gelesen werden können (zum Beispiel die nächsten Daten sind x ), nicht nur wenn es bei EOF ist, was sehr wichtig ist / p>

Beispiel:

Betrachten Sie den Code:

%Vor%

Wenn f eine Datei ist, die die Daten 123␣ enthält (das ␣ bedeutet Leerzeichen), ist das erste Lesen erfolgreich, aber danach enthält die Datei keine Ganzzahlen mehr und es ist nicht bei EOF. Der zweite Lesevorgang wird fehlschlagen und die Datei wird auf EOF sein, aber Sie wissen nicht, da Sie für EOF getestet haben, bevor Sie versuchten, zu lesen. Dann führt Ihr Code zu undefiniertem Verhalten, weil y nicht initialisiert ist.

    
Seth Carnegie 15.01.2013, 03:40
quelle

Tags und Links