输入数值时,代码卡住循环

时间:2013-09-24 12:32:12

标签: c++

嘿,当我输入数字字母时,我的代码一直停留在循环中,它只是使用“无效输入,我再试一次”来输出我的输出。这只是一个简单的菜单。

2 个答案:

答案 0 :(得分:3)

如果您输入任何“无效”,以便从cin读取将导致错误,您必须调用cin.clear()才能读取更多输入,否则操作符中的流将立即返回。 / p>

通常,在读取用户输入时,检查cin的状态并退出,或者在无效时执行一些错误处理。此外,在输入尝试失败时,导致错误的字符仍将位于cin中,并且需要被忽略(例如,直到下一个换行符):

#include <iostream>
#include <limits>

int main() {
    int userOption;
    while(1) {
        while(!(std::cin >> userOption)) {
            std::cout << "Invalid input." << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << userOption << std::endl;
    }
    return 0;
}

答案 1 :(得分:0)

问题在于以下代码行,

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

输入单个号码时,您不必忽略任何其他字符。因此,只需删除上面的代码行即可更正您的程序。