2016-11-01 5 views
0

Ich lese ein Einführungsbuch zu C++. Darin gibt es ein Beispielprogramm zum Öffnen einer Datei.Grundlegende Dateiverarbeitung in C++, EOF-Erkennung

Der Code ist wie folgt ...

#include<iostream.h> 
#include<fstream.h> 
void main() 
{ 
    ifstream fin; 
    fin.open("country"); 
    while(fin) 
    { 
     .... 
     ..... 
    } 
} 

Hier ist meine Zweifel. In dem Code sagt der Autor, dass fin auf 0 ausgewertet wird, wenn Fehler in der Dateioperation vorliegen (einschließlich End-of-File-Bedingung). In diesem Fall kann ein Objekt zu einer ganzen Zahl (dh 0) ausgewertet werden Some-Non-Null)?

+1

Siehe: http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool (und willkommen in der wunderbaren Welt der überladenen Betreiber). –

+1

Beachten Sie, dass Fehler oder Status nur aktualisiert werden * nachdem ein E/A-Vorgang ausgeführt wurde *. Das bedeutet, dass die Verwendung von 'fin >>' zum Lesen eines Wertes dann EOF auslösen kann. –

+4

Beachten Sie auch, dass Sie vielleicht ein [neueres/besseres Buch] (http://stackoverflow.com/q/388242/253056) erhalten möchten - 'void main' ist falsch, ebenso die Verwendung von' 'und' '(sie sind seit vielen Jahren veraltet - es sollte nur '' und '' sein). –

Antwort

2

In diesem Fall wie kann ein Objekt zu einer ganzen Zahl ausgewertet werden?

Durch operator bool Anwendung.

Beachten Sie, dass die

while(fin) 

ungewöhnlich ist. Stattdessen sollte es mit einer Eingabeoperation verwendet werden. Der Test testet dann, ob die Eingabeoperation erfolgreich ist. Siehe zum Beispiel das verknüpfte Beispiel.

#include <iostream> 
#include <sstream> 

int main() 
{ 
    std::istringstream s("1 2 3 error"); 
    int n; 
    std::cout << std::boolalpha << "(bool)s is " << (bool)s << '\n'; 
    while (s >> n) { // Is read successful? 
     std::cout << n << '\n'; 
    } 
    std::cout << std::boolalpha << "(bool)s is " << (bool)s << '\n'; 
}