想定解答は以下の通り。
全部見つけられたかな?
今回は簡潔にするためにfscanf関数を使っていますが、scanf関数やfscanf関数の使用は推奨されていません。実際にコードを書くときはfges関数とsscanf関数などを使おう。
修正されたソースコードは以下の通り。
#include <stdio.h>
#include <string.h>
int isLeapYear(int year) {
if (year % 4 == 0) {
if (year % 100 != 0) {
return 1;
} else {
if (year % 400 == 0) {
return 1;
} else {
return 0;
}
}
} else {
return 0;
}
}
void check(int year) {
if (isLeapYear(year) == 1) {
printf("%d年はうるう年です。\n", year);
} else {
printf("%d年はうるう年ではありません。\n", year);
}
}
void nextLeapYear(int year) {
int next = year + 1;
while (isLeapYear(next) == 0) { next++; }
printf("%d年の次のうるう年は%d年です。\n", year, next);
}
int main() {
char buf[8]; int year;
printf("check|next YYYY: ");
fscanf(stdin, "%s %d", buf, &year);
if (year < 0 || year >= 10000) {
printf("範囲外の入力です。\n");
return 1;
}
if (strcmp(buf, "check") == 0) {
check(year);
} else if (strcmp(buf, "next") == 0) {
nextLeapYear(year);
} else {
printf("不正な入力です。\n");
return 1;
}
return 0;
}