Функция возвращает разные значения при каждом выполнении

#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 " );