C++;:为什么输入一个";char";例如;int";变量导致递归发疯? 在C++中,为了实现输入输出的效果,我编写了一小段代码。我想知道它为什么会这样 //A Stupid Program #include <iostream> using namespace std; int main() { int x; cout << "please enter a numero: "; cin >> x; main(); }
但是,如果您输入的不是int,则递归循环会变得疯狂,并开始打印“请输入数字:”而不要求输入。它看起来像这样:C++;:为什么输入一个";char";例如;int";变量导致递归发疯? 在C++中,为了实现输入输出的效果,我编写了一小段代码。我想知道它为什么会这样 //A Stupid Program #include <iostream> using namespace std; int main() { int x; cout << "please enter a numero: "; cin >> x; main(); },c++,recursion,input,types,C++,Recursion,Input,Types,但是,如果您输入的不是int,则递归循环会变得疯狂,并开始打印“请输入数字:”而不要求输入。它看起来像这样: Please enter a numero: 1 Please enter a numero: 1 Please enter a numero: 152 Please enter a numero: 2 etc... please enter a numero: H please enter a numero: please enter a numero: please enter a
Please enter a numero: 1
Please enter a numero: 1
Please enter a numero: 152
Please enter a numero: 2
etc...
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
之外(您可以将所有内容提取到单独的函数中),问题在于,当您输入流无法解析的内容时,它会进入错误状态,每次操作都会立即返回,而不做任何操作。您需要检查错误状态并重置流以摆脱此状态。无限循环的原因: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;
intx=0;
而(!(cin>>x)){
cin.clear();
cin.ignore(数值限制::max(),'\n');
试试这个:
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;
}
intmain()
{
而(1)
{
int x;
cout>x;
if(cin.fail())
{
为了记录,这个程序甚至不合法,因为你不允许调用<代码>主<代码>。Clang不会编译它。在C++中,在程序中调用<代码>主< /代码>是非法的,因此你的问题可以简单地用“未定义的行为”来回答。。我使用Code::Blocks,它允许调用main
。即使在编写代码时,我也明白递归调用main
是一个糟糕的主意。这个程序只是我实验的产物。数字-1073741571更好地理解为,它是Windows异常代码状态堆栈溢出
。也就是说,程序被操作系统杀死,因为它消耗了分配给它调用栈的所有内存。这是一个程序所期望的,它会进入一个无限递归的程序,就像你的程序一样。@ PckYun-Be递归调用C++中的代码>主< <代码>只是因为我没有做这个而没有定义的行为。Up--原始的KLUGY实现全局构造函数。所有的现代C++编译器都用C编译器的方式来处理它,也就是说,它是一个正常的递归函数调用。(他们将不得不偏离其行为。)