奇怪的是,在尝试接受我的输入时,我陷入了无限循环。我过去能够适当地使用这样的循环,但出于某种原因,我被抓到了这里:
vector<string> boolean_forms;
while (!cin.eof()) {
cout << "HELP IM STUCK";
string line;
getline(cin,line);
if (!cin.fail()) {
boolean_forms.push_back(line);
}
}
我不知道,有更好的方法吗?我不能为我的生活弄清楚为什么这会引起问题。我的程序中的其他地方的代码是否有可能搞砸了?我无法想象它会是什么,因为这只是从一个我根本不写的文件中读取。
更新: 在更改为直接执行输入而不是首先检查文件结尾之后,我遇到了分段错误。 segfault不是由这个循环之外的任何东西引起的,就好像我尝试直接推回行而不是输入,程序按原样运行,我得到预期的输出。
这令人沮丧。在我尝试了所有提出的解决方案而且没有一个能够奏效的时候,我已经投入了地狱。如果我在检查文件结束之前读入,我会收到分段错误。如果我先检查eof然后再检查getline,我会得到一个无限循环。如果我硬编码插入我尝试检查向量的行,我的代码运行正常,所以我知道它必须与从cin读取。我读了./a.out&lt; input.txt直到现在已经为我工作了很多次。
答案 0 :(得分:0)
检查EOF,读取数据和重复是错误的方法。您应首先读取数据,检查读取是否失败,然后重复。
vector<string> boolean_forms;
std::string line;
while(getline(cin, line))
boolean_forms.push_back(line);
答案 1 :(得分:0)
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
的详细说明,请参阅this