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++;:为什么输入一个";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

但是,如果您输入的不是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 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编译器的方式来处理它,也就是说,它是一个正常的递归函数调用。(他们将不得不偏离其行为。)