c++ - 当输入 char 代替 int 时避免无限循环

标签 c++ infinite-loop cin

我正在做一个银行系统项目,需要确保每个输入都是有效的(程序必须是健壮的)。如果输入无效,则用户必须重新输入。
但是当我有一个 int 类型的变量并且用户输入 char 类型时,一个无限循环开始了。
例如:

int i;
cin>>i;

如果用户输入 char 无限循环开始。我怎样才能避免它并再次要求用户输入?
谢谢

最佳答案

无限循环的原因:

cin 进入失败状态,这使得它忽略对它的进一步调用,直到错误标志和缓冲区被重置。

cin.clear();
cin.ignore(100, '\n'); //100 --> asks cin to discard 100 characters from the input stream.

检查输入是否为数字:

在您的代码中,即使是非 int 类型也会强制转换为 int。如果不将输入转换为字符数组并调用 isdigit(),就无法检查输入是否为数字。作用于每个数字。

函数 isdigit() 可用于区分数字和字母。此函数存在于 header 中。

一个 is_int() 函数看起来像这样。

for(int i=0; char[i]!='\0';i++){
   if(!isdigit(str[i]))
      return false;
}
return true;

关于c++ - 当输入 char 代替 int 时避免无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27190382/

相关文章:

c++ - xxx.exe : 0xC00000FD: Stack overflow 中 0x77aa1f38 处未处理的异常

c++ - Visual Studio 停止调试程序时会自动清理内存吗?

Java 数列循环

c++ - Cin 不在等待输入

时间:2019-03-14 标签:c++

c++ - 具有递归算法的 SIGSEGV

c++ - 寻找优雅高效的 C++ 矩阵库

c++ - 循环直到整数输入在要求的范围内无法处理非数字字符输入

java - while循环和线程的无限循环问题

C++ cin 奇怪的行为