外部while循环有什么问题?

时间:2020-03-28 15:08:08

标签: c++ loops while-loop nested-loops

#include<iostream>
using namespace std;
int main()
{
  int x,y,n=0,ch='y';
  while(ch=='y')//problem loop
  {
    gno:
    x=rand()%9999+1000;
    y=x;
    n=0;
    while(y>0)
    {
      y=y/10;
      n++;
      if(n>3&&n<3)
        goto gno;
    }
    cout<<x<<endl;
    cin>>ch;
  }
  return 0;
}

每当我运行上面的代码时,它就会显示一个随机数。但是在那之后,即使当我将ch的值输入为“ y”(当然也没有引号!),标记为“问题循环”的while循环也不会继续。是的,我知道这是某种运行时错误,但是任何人都可以指定导致此问题的原因,并通过对代码进行确切的更改将使我成功运行它?

1 个答案:

答案 0 :(得分:3)

您将ch定义为int,这意味着cin会将输入解释为整数并将其读入ch。您可以观察到在输入121并继续执行代码时会发生这种情况。要解决您的问题,只需更改

int x,y,n=0,ch='y';

进入

int x,y,n=0;
char ch='y';

此外,您还有一个if语句,它将永远不会发生,因此您最好也摆脱if(n>3&&n<3)goto的影响。请记住,goto is bad.