捕获 cin 异常

Catch cin exception

我想请求用户输入,我用 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,所以如果用户输入一个字符串而不是数字,它应该再次询问他以获得更好的输入。但问题是,当输入例如 "AA" 时,程序会执行两次 AskForGroundstate,然后执行三次 "AAA" 等等。我是不是用错了?

问题是cin.ignore()丢了一个字符;您想将所有字符放到行尾:

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

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