0

ファイルから文字を読み込もうとしていますが、ファイルの終わり関数を使用すると、ファイル内の文字数を 1 より多くループしますが、理由がわかりません。

#include <iostream>
#include <fstream>

int main()
{
    ifstream file;
    char ch1;
        file.open("c:\\Downloads\\test.txt" , ios::in);

    int i=0;
    while(!file.eof())
    {  i++;
        file>>ch1;
                    cout<<ch1<<endl;
          }
           cout <<i<<endl;
file.close();
return 0;
}

ファイルが含まれています

[]

出力:[ ] ] 3

4

2 に答える 2

0

ファイルの最後の文字を読み取ってfile.eof()も、ストリームは最後に到達したことをまだ認識していないため、まだ false です。すでに存在しない文字を読み取ろうとした後でのみ、eof が true に設定されます。おそらくこれを行う必要があります

char ch;

while(file >> ch)
{
      ... 
}
于 2013-04-06T16:53:04.543 に答える
0

その理由は、まだファイルの最後に達していないからといって、次の読み取りが成功するとは限らないからです。文字を読み取っているため、最後の文字の後に実際に読み取ろうとしたときにのみ EOF が設定されます。

実際、ファイルから文字列、整数、またはその他の同様のものを読み取る場合でも、同様の問題があります。多くのテキスト ファイルの最後には、その後にテキストのない余分なファイルがあります\n\nしたがって、最後の行が読み取られるとき、ストリームにはまだ aがありますが、EOF は設定されていません。次に、そこにない次の行を読み進めますが、そこには抽出先が何であれ、以前と同じ内容が残っています。これにより、読み取りが重複しているように見えます。

于 2013-04-06T16:53:09.303 に答える