使用ifstreamwhile循环,如何显示输入错误并在下一行继续

With ifstream while loop, how to show an input error and resume at the next line?

本文关键字:继续 一行 错误 输入 何显示 ifstreamwhile 使用 显示 循环      更新时间:2023-10-16

如果我的输入文件以字母开头,它将停止while循环,因为它无法重写int1,我知道这一点,但我如何能够检测到这一点并显示一条错误消息,说明workinfile>>int1不工作,然后继续循环?

cin>>filename;
ifstream workingfile(filename);
while (workingfile>>int1>>int2>>string1>>string2) {
cout<<int1<<int2<<string1<<string2<<endl;
linenumread++;
}

我试过这样做,但不起作用,任何帮助都将不胜感激

while (workingfile>>int1>>int2>>string1>>string2) {
if(!(workingfile>>int1))
{
cout<<"Error first value is not an integer"<<endl;
continue;
}
cout<<int1<<int2<<string1<<string2<<endl;
linenumread++;
}

还有可能检测它是否也停止读取字符串吗?

输入文件看起来像这个

10 10 ab bc
11 11 cd ef
a  
12 12 gh hi

我想检测它何时命中无效输入,显示错误消息,然后继续文件中的下一行。

对于这种输入,通常最好读取一整行,然后从该行提取值。如果无法解析该行,则可以报告该行的失败,然后从下一行的开头继续。

看起来像这样:

std::string line;
while (std::getline(workingfile, line)) // Read a whole line per cycle
{
std::istringstream workingline(line); // Create a stream from the line
// Parse all variables separately from the line's stream
if(!(workingline>>int1))
{
cout<<"Error first value is not an integer"<<endl;
continue;
}
if(!(workingline>>int2)
{
cout<<"Error second value is not an integer"<<endl;
continue;
}
// ^^^^ a.s.o. ...
cout<<int1<<int2<<string1<<string2<<endl;
linenumread++;
}