2010-12-10 19 views
2

some_file.good()falseファイルから最後のエントリを読み取った後、またはそれを超える読み取りを試みた後に、それは私がファイルの読み込みをいつ停止しますか?

while (input.good()) 
{ 
    getline(input, line); 
    // ...process 
} 

または

getline(input, line); 
while (input.good()) 
{ 
    // ...process 
    getline(input, line); 
} 

を書く必要があります、ありますか?

答えて

9

は、あなたが試みることができる...それを超えて読み込もう:

while(getline(input, line)) 
{ 
// do stuff with line 
} 

を追加する必要があり、その流れは、通常どおりのフラグをチェックする、operator!を実装しています。 getlineからの戻り値は入力ストリームですが、演算子のためにフラグがチェックされます。

+1

+1、それは、それが通常行うの方法です。 – Puppy

+0

ああ、 'getline'が入力ストリームを呼び出し元に返信するのを知らなかった。その場合、私は可読性のためにwhile(getline(input、line).good())と一緒に行くつもりだと思う。 – fredoverflow

+1

実際、それはかなり慣用的なので、読みやすいようにする必要はありません。 'while(stream >> item)'も慣用句です(ただし、ボックス外の行では機能しません)) – etarion

0

すでに提案したように、getlineは、行がなくなるとゼロを返します。 EOFフラグは(ストリームに達したファイルの、すなわち端部)に設定されている場合にもtrueを返しeof()方法は:

if(input.eof()) 
{ 
// end of file 
} 
+1

'getline'はゼロを返しません。入力ストリームを返します。 – fredoverflow

関連する問題