У вас есть две разные переменные a
:
В пределах своего охвата (почти все main()
) последний скрывает первый. В других местах, например в функции abcd()
, видна только первая. Первый из них по умолчанию инициализируется равным 0, и никакое другое значение ему никогда не назначается, поэтому независимо от того, какое значение i
принимает, внутри abcd()
выражение a%i
оценивается в 0.
Это хороший урок по избежанию переменных области файла. Функции должны работать с данными, доступ к которым прямо или косвенно осуществляется через их параметры или получены из внешнего источника. Это плохая форма для функций для обмена данными через переменные области файла. Более того, для меня было красным флагом, что ваша функция abcd()
объявляет параметр, который она никогда не использует. Предлагаемое изменение:
char abcd(int dividend, int divisor) {
return (dividend % divisor) ? 'n' : 'y';
}
Или даже лучше (потому что лучше имя и более подходящий тип возвращаемого значения):
_Bool is_divisible(int dividend, int divisor) {
return !(dividend % divisor);
}