c++ - 捕获 cin 异常

标签 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 型,因此如果用户输入不带数字的字符串,则应再次要求他提供更好的输入。但问题是,当输入例如“AA”时,程序会执行 AskForGroundstate 两次,“AAA”执行三次,依此类推。我是否使用了clear错误?

最佳答案

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

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

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

关于c++ - 捕获 cin 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38200600/

相关文章:

c++ - 尝试渲染 3d 三角形会破坏 Nvidia 驱动程序!为什么? [C++ && DirectX11 SDK]

c++ - 程序跳过 Getline() 而不接受用户输入

c++ - Windows 屏幕上的渲染缓冲区

java - 没有这样的元素异常错误?

时间:2019-03-17 标签:c#asyncawait

java - 具有包含 HTML 代码的 JLabel 节点的 JTree 在展开节点时抛出异常

c++ - 为什么我需要 std::endl 来重现我用 getline() 得到的输入行?

c++ - 如何使我的字符缓冲区性能更高?

c++ - C++11 中的 P99_FOR

c++ - QNetworkReply::finished() 信号是顺序调用还是同时调用?