0

ファイルを読み込むプログラムがあります。私のクラスはすべて正常にコンパイルされますが、ファイルを読み込むとエラーが発生するようです。Eclipse は、空の文字列が ("") で読み取られていることを示していますが、これは私が望んでいるものではありません。

以下に、while ループを含むメインのコードを示します。デバッグ時にどのように実行されるかを確認するためだけにループを配置しましたが、常に "" を読み取り、ファイルの終わりに到達しないため、無限ループを実行します。念のため、ファイルを作業ディレクトリと他のすべてのフォルダーに配置しましたが、ファイルが文字列と整数でいっぱいであっても、常にこれを実行しています。ここで間違っていることはありますか?

#include "Translator.h"
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    ifstream readFile;
    readFile.open("sample.html");

    while (!readFile.eof()) // for debugging purposes only
    {
    string x;

    readFile >> x; // x is "" everytime through the loop
    readFile >> x; // x is also ""
    }
    Translator t(readFile);

    readFile.close();
    return 0;
}
4

1 に答える 1

0

私の推測では、ファイルが実際に開かれていないため、eofビットが設定されていません。ファイルが正常に開かれたかどうかをテストすることはありません。作業ディレクトリが想定と異なるか、ファイルが別のプロセスによってロックされている (おそらくテキスト エディタで開いている) 可能性があります。

正式には、readFile.fail()開いてみてからテストできます。

チェックも問題ないことがわかりましたreadFile.good()-実際、それをループ条件として使用できます。

私は自分のコードで、動揺する可能性のある「失敗」よりも「良い」という肯定的なメッセージを好みます。

また、データを読み取るときに、WhozCraig がコメントで提案したように、ストリームをテストする必要があります。操作が成功したとは想定できません。EOF 以外の理由で失敗した場合は、知っておく必要があります。

readFile.eof()これらの理由から、ループ条件として使用しないでください。

于 2013-02-06T22:24:01.643 に答える