我有一个读入文件的程序。我的所有类都编译得很好,但是当我在文件中读取时似乎出现了错误。 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;
}
答案 0 :(得分:0)
我的猜测是你的文件实际上没有打开,因此没有设置eof
位。您永远不会测试文件是否已成功打开。可能是您的工作目录不是您想象的那样,或者文件被另一个进程锁定(可能在文本编辑器中打开)。
正式地,您可以在尝试打开后测试readFile.fail()
。
我发现检查readFile.good()
也很好 - 事实上你可以将它作为你的循环条件。
我更喜欢我的代码中的“好”的积极信息,而不是可能令人沮丧的“失败”。
在阅读数据时,您还应该按照WhozCraig在评论中建议的方式测试您的信息流。您不能假设操作成功。如果由于EOF以外的原因而失败,你需要知道。
出于这些原因,请勿使用readFile.eof()
作为循环条件。