2016-11-01 3 views
0

私はC++の入門書を読んでいます。 そこには、ファイルを開くためのプログラム例があります。次のようにコードがある基本ファイルC++での処理、EOF検出

...

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

は、ここに私の疑問です。 コードでは、ファイル操作にエラーがある場合(ファイルの終了条件を含む)、finは0に評価されます。この場合、オブジェクトはどのように整数に評価されますか?一部非ゼロ)?

+1

参照:http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool(オーバーロードされた演算子の素晴らしい世界へようこそ) –

+1

エラーまたはステータスは、I/O操作が行われた後にのみ*更新されることに注意してください。つまり、 'fin >>'を使用して値を読み取ると、EOFがトリガーされる可能性があります。 –

+4

また、[ 'と' ]のように 'void main'が間違っていて、[もっと新しい/より良い本](http://stackoverflow.com/q/388242/253056) '(彼らは何年も時代遅れとなっています。それはちょうど' 'と' 'であるべきです)。 –

答えて

2

この場合、オブジェクトはどのようにして整数に評価されますか?

operator boolを適用してください。

while(fin) 

はまれである

注意。代わりに、入力操作で使用する必要があります。テストは、入力操作が成功したかどうかをテストします。たとえばリンクされた例を参照してください。

#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'; 
}