#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
это неопределенное поведение.