永远不会达到 EOF(无限循环)
EOF is never reached (infinite loop)
奇怪的是,在尝试接受我的输入时,我陷入了一个无限循环。我过去已经能够适当地使用这样的循环,但由于某种原因,我在这里被抓住了:
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
的详细说明,请参阅此处
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- 永远不会达到 EOF(无限循环)
- 使用.eof()方法的无限循环
- eof() 函数不起作用 C++ 陷入无限循环
- EOF进入无限循环
- EOF返回空行或无限循环
- c++ boost asio Windows文件句柄async_read_until无限循环-没有eof.< /
- 当check为eof时,使用getline读取文本文件会导致无限循环