0

我有一个读取文件的程序。我所有的类都编译得很好,但是当我读入文件时似乎有错误。Eclipse 显示正在读取一个空字符串 (""),这不是我想要的。

我在下面有一个带有 while 循环的 main 代码。我放置循环只是为了看看它在调试时如何运行,它运行一个无限循环,因为它总是在“”中读取,并且永远不会到达文件末尾。为了确定,我已将文件放在工作目录和所有其他文件夹中,但即使文件中充满了字符串和整数,它也总是这样做。我在这里做错了什么吗?

#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 回答