C Зацикливание Оператора If?

#c #if-statement

Вопрос:

Я работаю над тестом с C, но я столкнулся с проблемой. Почему C зацикливает оператор if «if (ans==true)»? Я знаю это, потому что переменная сумма-сумасшедшее число, например 32767.

 #include <stdio.h>
#include <stdbool.h>

bool askQuestion(char question[100],int answer){
    int userAns;

    printf("%s n",question);
    scanf("%d",amp;userAns);

    if (userAns==answer){
      printf("Correct n");
      return(true);
    }
    else{
      printf("Wrong n");
      return (false);
    }
    printf("ERROR ERROR ERROR!");
}

int main(void)
{
  
    bool ans;
    int sum;

    ans = askQuestion("yoyoyo",10);
    if (ans==true){
      sum =1;
    }



    printf("Your score was %d/5",sum);






    return 0;
}
 

ПРАВКА: я не инициализировал переменную sum. Моя вина.

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

1. sum является неинициализированным.

2. Проверьте возвращаемое значение scanf("%d",amp;userAns); в случае, если пользователь не ввел целое число. Эти входные данные остаются в буфере

3. Кстати, где находится петля

4. @EdHeal Я думал, что это зацикливание оператора if, потому что сумма увеличивалась. Моя вина.

5. Примечание: у вас также есть неопределенное поведение после объявления об ошибке — функция не возвращает никакого значения. Это упущение и неинициализированная переменная обычно предупреждаются компилятором.

Ответ №1:

В этом нет зацикливания, sum он неинициализирован, поэтому его значение не определено. Легко исправить,

Инициализировать сумму:

 int sum = 0;
 

Также вы можете проверить возвращаемое значение scanf() в случае, если произошла ошибка ввода,

 if (scanf("%d", amp;userAns) != 1)
{
    fprintf(stderr, "Scanf conversion error.n");
    exit(EXIT_FAILURE); /* #include <stdlib.h> */
}
 

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

1. Возможно, сообщение об ошибке было бы неплохо перед выходом

2. Да, действительно, я добавил @EdHeal

Ответ №2:

Поскольку sum не инициализирован, sum = 1 это неопределенное поведение.