c ++检测用户是否输入了字符串而不是Int

use*_*856 0 c++ string int

我正在制作一个程序,用户必须通过输入1,2或3来选择一个选项.我能够检测到他们输入了什么号码并让程序重复提示,如果他们输入的数字不是这些,而是​​使用切换声明.每次我输入一封信时,程序会不断地每秒重复提示数百次.如何在继续之前检查变量以确保它包含int.我有一种感觉,它会涉及使用一个字符串然后检查它以确保它包含一个int然后转换它,如果我可以有一个这样的代码的例子,它会很棒.谢谢

Die*_*ühl 9

您应始终验证是否已成功读取所需的输入.如果输入失败,您可能想要摆脱有问题的字符并重试:

int value(0);
while (!(std::cin >> value)) {
    std::cout << "you entered a non-digit character\n";
    std::cin.clear();   // make sure that std::cin is happy to do something
    std::cin.ignore();  // ignore the offending character
}
Run Code Online (Sandbox Code Playgroud)

当输入失败时,在std::ios_base::failbit流上设置并且流将不转换为true(或!应用于流的非运算符返回true).一旦std::ios_base::failbit设定,流将拒绝取得任何进展,直到该位再次被清除.使用clear()您可以重置错误位.然而,一旦比特被重置,违规字符仍然在输入中.要摆脱你可以使用的下一个角色ignore().如果你觉得你想忽略整个输入行,你会使用类似的东西

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)