как повторить цикл выполнения при выполнении условия true

#c

#c

Вопрос:

Часть, которую я не могу решить, заключается в том, что я проверяю числовые цифры, отличные от 1 или 0, используя checknumber() . Теперь, если цифры отличаются от 0 или 1, попросите пользователя снова ввести число, пока цифры не будут равны только 0 и 1. После этого преобразуйте в двоичный файл, а затем снова проверьте, что число больше -1, а число отрицательное, тогда только выход. основная функция:

 int main()
{
    int num = 0, flag;
    while (num > -1) {
        do {
            cout << "Enter Number: ";
            cin >> num;
        } while (checknumber(num, flag) == 0);
        cout << "Result in Decimal = ";
        cout << binaryToDecimal(num) << endl;
    }
}
 

Это мой контрольный номер ():

 int checknumber(int number, int flag)
{
    while (number != 0) {
        int val = number % 10;
        if ((val != 1) amp;amp; (val != 0)) {
            flag = 0;
            break;
        }
        else {
            flag = 1;
        }
        return flag;
    }
}
 

результат, который я получаю при вводе числа, отличного от 0 или 1:
введите описание изображения здесь

Комментарии:

1. Ваша checknumber() функция может завершиться без установки возвращаемого значения.

2. Вы всегда должны проверять состояние cin после считывания значения.

3. Где инициализируется переменная flag ? Я думаю, проблема, из-за которой вы никогда не инициализируете flag в main, устраняет проблему, из-за которой вы никогда не используете параметр flag в checknumber .

4. @NathanPierson , я уже отредактировал.

5. Пожалуйста, не меняйте код в своем вопросе после получения ответа. Ваше редактирование делает приведенный ниже ответ бессмысленным. Я отменил это редактирование.

Ответ №1:

В вашей checknumber функции вы никогда не делите number , и, таким образом, вы застряли в бесконечном цикле. Вы также возвращаетесь на первой итерации цикла. Я не понимаю использования flag ни того, ни другого.

Исправленный checknumber будет:

 int checknumber(int number) 
{
  while(number != 0)
  {
    int val = number % 10;
    if((val != 1) amp;amp; (val != 0))
    {
      return 0;
    }
    number /= 10;
  }
  return 1;
}
 

Комментарии:

1. использование bool в качестве возвращаемого типа кажется еще более правильным.

2. @Jarod42 Я хотел упростить просто вставить его в его существующий код.