奇怪的是,在尝试接受我的输入时,我陷入了一个无限循环。我过去已经能够适当地使用这样的循环,但由于某种原因,我在这里被抓住了:
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
的详细说明,请参阅此处