2013-06-19 4 views
6

は、私はちょうど私の試験の見直しだし、まわりで私の頭を取得することはできません私たちの講師が提供する以下:最初にファイルを読み込んだ後にチェックするのはなぜですか?

あなたが開いているかどうかを確認または

  • が続いて前に読んでいない、fstreamの開設あなたが前に読んでチェックした場合、あなたが 余分な不要な入力

で終わる可能性があり、input_file.fail()

  • をチェック

    最初に読んでも意味がありません。最初に確認してください。誰もが説明できる場合

    、私は

  • 答えて

    10

    input_file.fail()は、いずれかの操作が失敗した場合は、今後の操作が失敗しようとしているか否かを決定:)非常に感謝されます。したがって、あなたが書く場合は、この:

    if (!input_file.fail()) { 
        int value; 
        input_file >> value; 
    
        /* ... process value ... */ 
    } 
    

    その後valueを読んだ後、あなたはあなたが実際に成功したかどうか何かを読んでいるかどうか全くわかりません。あなたが知っているのは、の直前で、の前に読んだことがすべて正しく機能していたことです。ファイルの最後にヒットしたか、ファイル内のデータが整数でなかったために、整数を読み込めなかった可能性があります。あなたは

    int value; 
    input_file >> value; 
    
    if (!input_file.fail()) { 
        /* ... process value ... */ 
    } 
    

    を書く場合

    一方、その後、読み取りを行うことを試みます。成功した場合は、読み込んだ値を処理します。そうでない場合は、最後の操作が失敗したという事実に反応することができます。

    (あなたはこれよりさらに可愛いなります。

    int value; 
    if (input_file >> value) { 
        /* ... process value ... */ 
    } 
    

    1に読み込まれ、テスト操作を組み合わせたそれはあなたが読み取りが成功したことを確認していることを、ここでより明確だ)

    の場合あなたがやっている、これを行うには非常にきれいな方法は、ファイルからの読み取り値を保つことができるしている間、これは明確にあなたのループいることになり

    for (int value; input_file >> value;) { 
        /* ... process value ... */ 
    } 
    

    で、ループ内で読み込みます。

    希望すると便利です。

    +0

    はい!それはすべて意味があります。そして、それが失敗すれば、ファイル、エラーメッセージなどをクリアしますか? ありがとうございました! – jewfro

    +0

    @ jewfro-うん、そうだね! – templatetypedef

    +0

    ifおよびloopのショートカットは、 '>> '演算子がストリームへの参照を返し、' bool'演算子が 'fail'を呼び出すため動作します。 –

    関連する問題