Helpers - компьютеры, интернет, программирование

Не могу выйти из бесконечного цикла

Я работал над простым упражнением, в котором мне нужно задать некоторые математические вопросы, а пользователю нужно ответить, используя целые значения, и я сделал все, кроме той части, где, когда используется что-то еще, кроме целого числа, я получаю бесконечный цикл... Я могу остановите его, используя перерыв, но я хочу снова попросить пользователя ввести целое число.

Вот код (я использую этот веб-сайт для тестирования своего кода [https://repl.it/languages]) если бы я мог получить некоторое представление об этом, это было бы здорово!Спасибо!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char ft_op()
{
 srand(time(NULL));
 char lop[4] = "+-/*";
 int rop = rand() % 4;
 char op = lop[rop];

 return op;
 }

 int ft_result(int nb1, int nb2, char op)
  {
   int result = 0;

   if (op == '+')
    result = nb1 + nb2;
   else if (op == '-')
    result = nb1 - nb2;
   else if (op == '/')
    result = nb1 / nb2;
   else
    result = nb1 * nb2;

   return result;
  }

int main(void)
 {
srand(time(NULL));

int nb1;
int nb2;
char op;
int uresult;
int result;
int nbq = 1;
int grade = 0;

while (nbq < 11)
{
  nb1 = rand()%101;
  nb2 = rand()%101;
  op = ft_op();
  result = ft_result(nb1,nb2,op);

  printf("\nQuestion %d : Calculez %d %c %d = ",nbq, nb1, op, nb2);
  if (scanf("%d", &uresult) != 1)
  { 
   printf("\nErreur de saisie. Veuillez recommencer.\n");
   break;
  }
  else
    {
      nbq = nbq + 1;
      if (result == uresult)
      {
        grade = grade + 1;
        printf("\nBravo vous avez deviné juste !\n");
      }
      else
        printf("\nPas de chance, votre résultat est %d et le bon résultat %d\n",uresult, result);
    }
}
printf("\nVotre note finale est de %d/10", grade);
return 0;
}
06.06.2020

  • Вы увеличиваете nbq только при сбое scanf 06.06.2020
  • что печатает ваша программа? 06.06.2020
  • nbq увеличивается только тогда, когда сканирование правильное, и программа печатает оценку в конце, если вы угадали правильно или неправильно, вы переходите к следующему вопросу, в зависимости от ответа вы получаете оценку +1 или нет, пока не дойдете до последний вопрос (10-й), и я хочу спросить еще раз, когда сканирование не удается. 07.06.2020

Ответы:


1

Вам нужно очистить/поглотить входной поток, когда ввод не является числом.

int c   
while ((c = getchar()) != '\n' && c != EOF);

Приведенный выше цикл будет продолжать принимать char из ввода, пока не найдет новую строку или EOF (конец файла). Ему не нужно ничего делать с вводом, поэтому нет блока тела.

Замените break; на continue;

if (scanf("%d", &uresult) != 1) { 
   printf("\nErreur de saisie. Veuillez recommencer.\n");

   int c   
   while ((c = getchar()) != '\n' && c != EOF);

   continue;
}
06.06.2020
  • Я пишу здесь снова, я здесь новенький, поэтому я не знаю, как это на самом деле работает, но спасибо за ответ, я посмотрю на это! 07.06.2020
  • @chux-ReinstateMonica да, я забыл удалить его перед публикацией. Спасибо 07.06.2020
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..