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

时间:2017-11-14 17:35:28

标签: c++ while-loop ifstream

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

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++;
}

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

1 个答案:

答案 0 :(得分:5)

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

这看起来像这样:

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++;
}