#c #initialization
Вопрос:
Я несколько новичок в кодировании и столкнулся с логической ошибкой. Цель состоит в том, чтобы создать функцию, которая проверяет, делится ли число от 2 до 10. Однако, как я проверил, переменная userInput возвращает правильное значение, но значение функции меняется при каждом выполнении. Вот код:
#include <stdio.h>
int testDivisible(int a) {
int checker; // checker is intended for counting divisible numbers between 2-10; if returned > 0, then not divisible
for (int i=2; i<=10; i ) {
if (a % i == 0) {
checker = checker 1;
}
}
return checker;
}
int main() {
int userInput;
printf("Enter number: ");
scanf("%d", amp;userInput);
int x = testDivisible(userInput);
if (x > 0) {
printf("Is divisible by 1 to 10n");
}
else {
printf("Is not divisible by 1 to 10n");
}
printf("%dn", userInput); // intended for testing
printf("%d", x); // intended for testing
}
Тем не менее, когда я компилирую и запускаю код, результаты:
Исполнение 1:
Enter number: 17
Is divisible by 1 to 10
17
847434400
Исполнение 2:
Enter number: 17
Is not divisible by 1 to 10
17
-1002102112
Комментарии:
1.
int checker; // checker is intended for counting
Обычно вы начинаете считать с определенного значения. Вы не инициализируете эту переменную, вызывающую неопределенные значения2. @Gerhardh Это решает проблему. Спасибо вам за вашу помощь!
Ответ №1:
В вашем коде,
int checker;
является автоматической локальной переменной, которая не инициализируется явно. Итак, начальное значение, которое он содержит, неопределенно.
Вы должны инициализировать значение в 0
.
Комментарии:
1. Это решает проблему. Спасибо.
Ответ №2:
typedef int BOOL;
#define FALSE 0
#define TRUE 1
BOOL testDivisible(int a)
{
for (int i=2; i<=10; i )
if (a % i)
return FALSE;
return TRUE;
}
Используйте его так:
printf("Is %sdivisible by 2 to 10n",
(TRUE==testDivisible(userInput))? "":"not " );