永远不会达到 EOF(无限循环)

EOF is never reached (infinite loop)

本文关键字:无限循环 EOF 永远      更新时间:2023-10-16

奇怪的是,在尝试接受我的输入时,我陷入了一个无限循环。我过去已经能够适当地使用这样的循环,但由于某种原因,我在这里被抓住了:

vector<string> boolean_forms;
while (!cin.eof()) {
cout << "HELP IM STUCK";
string line;
getline(cin,line);
if (!cin.fail()) {
boolean_forms.push_back(line);
}
}

我不知道,有没有更好的方法?我一辈子都无法弄清楚为什么这会导致问题。我的程序中是否有可能其他代码搞砸了事情?我无法想象它会是什么,因为这只是从我根本不写入的文件读取。

更新: 更改为直接输入而不是先检查文件末尾后,我遇到了分段错误。段错误不是由此循环之外的任何内容引起的,就好像我尝试直接推回行而不是从输入推回行一样,程序会按预期运行,并且我得到预期的输出。

这是。。。令人 沮丧。当我尝试了所有提出的解决方案并且没有一个奏效时,我被否决了。如果我在检查文件末尾之前读入,则会出现分段错误。如果我先检查 eof,然后检查 getline,我会得到一个无限循环。如果我硬编码插入我试图检查的行到向量中,我的代码运行良好,所以我知道它一定与从 cin 读取有关。我用 ./a.out <输入法读入.txt到目前为止,它已经为我工作了无数次。>

检查 EOF、读取数据并重复是错误的方法。您应该首先读取数据,检查读取是否失败,然后重复。

vector<string> boolean_forms;
std::string line;
while(getline(cin, line))
boolean_forms.push_back(line);
ifstream iFile("input.txt"); // You need to change the file location based on your setup.

试试这个:

while (true) {
std::string line;
iFile >> line;
if( iFile.eof() ) 
break;
// Do Something
}

有关isotream::eof的详细说明,请参阅此处