赶上cin例外

时间:2016-07-05 10:05:08

标签: c++ exception iostream

我想问用户输入,我用cin这样得到了

void AskForGroundstate() {
    cout << "Please enter an groundstate potential value in Volt:" << endl;
    if (!(cin >> _VGroundstate)) {
        cin.clear();
        cin.ignore();
        cout << "Groundstate potential not valid." << endl;
        AskForGroundstate();
    }
}

_VGroundstate是一个double,所以如果用户输入的字符串不是数字,它应该再次询问他是否有更好的输入。但问题是,当输入例如&#34; AA&#34;时,程序执行AskForGroundstate两次,使用&#34; AAA&#34;三次等我使用了明确的错误吗?

1 个答案:

答案 0 :(得分:4)

问题是cin.ignore()丢弃了一个字符;你想把所有的字符都放到行尾:

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

这可确保在再次提示输入最终用户之前删除所有无效输入。