В чем проблема во внешнем при l oop? - PullRequest
1 голос
/ 28 марта 2020
#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» (конечно, без кавычек!), В то время как l oop, помеченный как «проблема l oop», просто не продолжается. Да, я понимаю, что это какая-то ошибка во время выполнения, но кто-нибудь может указать, в чем причина этой проблемы, и какие точные изменения в коде позволят мне запустить его успешно?

1 Ответ

3 голосов
/ 28 марта 2020

Вы определили 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. Имейте в виду, что Гото плохо.

...