c ++检测用户是不是输入字符串而不是Int [关闭]

Posted

技术标签:

【中文标题】c ++检测用户是不是输入字符串而不是Int [关闭]【英文标题】:c++ Detecting If A User Entered A String Instead Of An Int [closed]c ++检测用户是否输入字符串而不是Int [关闭] 【发布时间】:2012-12-31 02:33:09 【问题描述】:

我正在制作一个程序,用户必须通过输入 1,2 或 3 来选择一个选项。我能够检测他们输入的数字,如果他们输入的数字不是这些数字,我可以让程序重复提示使用 switch 语句。每次我输入一个字母,程序每秒都会不断重复提示数百次。在继续之前,如何检查变量以确保它包含一个 int。我有一种感觉,它会涉及使用一个字符串,然后检查它以确保它包含一个 int 然后转换它,如果我能有这个代码的一个例子,那就太好了。谢谢

【问题讨论】:

查看输入操作的结果。 如果您只将 1-3 作为有效输入,您可以只存储第一个字符并检查 ascii 值是否为数字 除非您发布您正在使用的代码,否则我们几乎不可能为您提供明确的帮助。 您可能只需要在您的switch 语句中添加一个default 案例。如果您提供SSCCE,会更容易提供帮助。 【参考方案1】:

您应该始终验证您是否已成功读取所需的输入。如果输入失败,您可能希望摆脱违规字符并重试:

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

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

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

【讨论】:

以上是关于c ++检测用户是不是输入字符串而不是Int [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中检测 int 的逻辑

如何检测文本字段中是不是包含文本而不是数值?

异常处理

JS中验证检测用户输入的电子邮件是不是含有@

异常处理

异常处理