1

次のコードは、ファイルを1回だけ出力します。

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, const char *argv[])
{
    ifstream infile;
    infile.open("in", ios::binary);
    char c;

    while (infile.get(c))
    {
        cout << c;
    }

    infile.seekg(0, ios::beg);
    infile.clear();

    while (infile.get(c))
    {
            cout << c;
    }
    infile.close(); 
    return 0;
}

ファイルを実行した後のeofフラグと関係があると思いますが、それを修正する方法がわかりません。

乾杯。

4

1 に答える 1

2

コードにはいくつかの問題があります。

infile.get()まず、その結果を使用する前に、それが成功することを確認しません。そしてinfile.good()、あるループinfile.eof()を制御し、別のループを制御するために使用しています:infile.eof() 入力が失敗したことを知るまでは役に立たず、実際に infile.good()は決して役に立ちません。while ( infile.get( c ) )両方のループに使用してください。

第二に、あなたが言うように、最初のループを終了させる原因となった「エラー」をリセットすることはありません。ファイルの最後に到達した (そして失敗した) 場合は、他の処理を行う前infile.get( c )に呼び出す必要があり ます。infile.clear()

最後に、もちろん、ファイルを正常に開いたかどうか、および成功したかどうかを確認できませんseekg。通常、入力ファイルを閉じる必要はありません。範囲外になると自動的に閉じられます。(一方、を閉じる、フラッシュstd::coutして、後でまだ問題がないことを確認する必要があります。0すべてのデータを書き込めなかったときに戻ることは、私の本では重大なエラーです。)

于 2013-02-14T19:40:40.273 に答える