C++:为什么为"int"变量输入"char"会导致递归变得疯狂?
C++: Why does inputting a "char" for an "int" variable cause recursion to go crazy?
为了练习C++输入和输出的效果,我写了一小段代码。我想知道为什么它的行为会像它一样。
//A Stupid Program
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "please enter a numero: "; cin >> x;
main();
}
运行代码会询问用户"请输入数字:_",并在输入数字时重复。这可以是任何整数。典型输出如下所示:
Please enter a numero: 1
Please enter a numero: 1
Please enter a numero: 152
Please enter a numero: 2
etc...
但是,如果您输入 int 以外的任何内容,递归循环就会变得疯狂并开始打印"请输入数字:"而不要求输入。它看起来像这样:
please enter a numero: H please enter a numero: please enter a numero: please enter a numero: please enter a numero: please enter a numero: please enter a numero: please enter a numero: please enter a numero: please enter a numero: please enter a numero: please enter a numero: etc...
然后程序停止工作并返回 -1073741571。
所以这就是我想要帮助的:为什么程序在输入非 int 时不等待输入,为什么它会返回 -1073741571?
谢谢你的帮助。
事实上,
你把main
放在一边(你可以把所有内容提取到一个单独的函数中),问题是当你输入流无法解析的东西时,它会进入一个错误状态,它立即从每个操作返回而不做任何事情。您需要检查错误状态并重置流以摆脱这种情况。
试试这个:
int main()
{
while(1)
{
int x;
cout << "please enter a numero: "; cin >> x;
if (cin.fail())
{
cout << "Please enter integer value! " << endl;
cin.clear();
cin.ignore(INT_MAX, 'n');
}
}
return 0;
}
无限循环的原因:
cin
进入失败状态,这使得它忽略对它的进一步调用,直到重置错误标志和缓冲区。
为了避免它,请执行以下操作:
int x = 0;
while(!(cin >> x)){
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
cout << "Invalid input. Try again: ";
}
cout << "You enterd: " << x << endl;
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- C++:为什么为"int"变量输入"char"会导致递归变得疯狂?