Top.Mail.Ru
Ответы

Почему этот код написанный на C не работает?

#include

int main(){

int year;

printf("Enter your year:");

scanf("%d", year);

if(year % 4 == 0 && year % 100||year % 4 && year % 400)
printf("Your year is bissextile");
else
printf("Your year is not bissextile");

return 0;
}

По дате
По рейтингу
Аватар пользователя
Оракул
9лет

scanf("%d", &year);
А, разве leap year не чаще употребляется?

Аватар пользователя
Ученик
9лет

И что здесь не так?

Аватар пользователя
Ученик
9лет

Дак вроде без разницы это ведь название переменной

Аватар пользователя
9лет

Всё правильно. Действительно, в scanf надо передавать адрес переменной, а не саму её. Причина этого в том, что передача параметров в C происходит по значению, поэтому в данной программе в функцию scanf передаётся значение переменной year, и это значение воспринимается в качестве адреса переменной, которую надо ввести.
Но есть, кажется, и дальше ошибка: в условии "if(year % 4 == 0 && year % 100||year % 4 && year % 400)". Год считается високосным, если он либо кратен 4, но при этом не кратен 100, либо кратен 400, не так ли? Здесь же мы видим другое условие: (year % 4 == 0 (делится на 4) и year % 100 (не делится на 100) или (year % 4 (не делится на 4) и year % 400 (не делится на 400)). Прямо скажем, странное условие.
Для тех, кто в танке, напомню: в языке C условие year % 400 без проверки на "==0" считается истинным в случае, если его значение ненулевое - то есть если не равен нулю остаток от деления year на 100.

Аватар пользователя
9лет

...в последнем предложении "*на 400".



Видео по теме