eof() のファイル入力での使用法: 物議を醸す実践
質問:
にもかかわらずファイル入力プログラムで一般的に使用される eof() 関数は、論争を巻き起こしました。一部のプログラマはこれを許容できると考えていますが、他のプログラマはその使用を強く推奨しています。この質問では、この分裂の背後にある理由を探ります。
回答:
eof() 関数は、ファイルの末尾を超えて読み取ろうとする試みを識別するという特定の目的を果たします。 。ただし、追加の入力が残っているかどうか、または読み取り操作が成功したかどうかをテストする場合には、これは不適切な選択です。
悪い習慣と考えられる理由:
eof() が推奨されない主な理由は、その曖昧さです。ファイルの末尾を超えて読み取ろうとしたかどうかのみを示します。有効なデータが実際に読み取られたかどうか、またはさらに処理するデータがあるかどうかに関する情報は提供されません。
不適切な使用例:
次の誤った使用法を考慮してください。
while (!cin.eof()) { cin >> foo; }
このループは、eof() が読み取る入力が残っているかどうかを判断できることを前提としています。ただし、ファイルの終わりに到達する以外の何らかの理由 (無効な形式など) で読み取り操作が失敗した場合、ループは無限に継続します。
正しい使用法:
eof() が表す特定の条件を適切にテストするには、次のアプローチを採用します:
if (!(cin >> foo)) { if (cin.eof()) { cout << "Read failed due to EOF\n"; } else { cout << "Read failed due to something other than EOF\n"; } }
以上がファイル入力での `eof()` は良い習慣ですか? なぜ物議を醸すのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。