今、C言語の勉強をしていて、「西暦と月をscanfで入力し、”西暦●●
今、C言語の勉強をしていて、「西暦と月をscanfで入力し、”西暦●●年の●月は●日です”というプログラムを完成させなさい」という問題がありました。
また、条件が「4の倍数で、かつ100の倍数でない場合か、400の倍数の場合は閏年である」また
「西暦が0以下のとき、月が1以下12以上の場合はエラーメッセージを表示させなさい。」というものです。
そこで、コーディングした結果、下記のようになりました。
#include <stdio.h>
main()
{ int y,m,d;
printf("西暦=");scanf("%d",&y);
printf("月=");scanf("%d",&m);
if(y<0 || d>1 && d<12)
printf("エラーです。");
else if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)
d=31;
printf("西暦%d年の%d月は%d日です。",y,m,d);
else if(m==4 || m==6 || m==9 || m==11 )
d=30;
printf("西暦%d年の%d月は%d日です。",y,m,d);
else if(m==2 && y%4==0 && y%100>0 || y%400==0)
d=29;
printf("西暦%d年の%d月は%d日です。",y,m,d);
else d=29;
printf("西暦%d年の%d月は%d日です。",y,m,d);
}
これを、学校の先生が開発したコンパイラで文法チェックを施したところ、
「予約語elseは使用できません」と文法エラーがでました。
「else」は、if文のthen/elseの意味で利用したのにそういう風にとらえてくれませんでした。
また、字下げは適当にやっているだけですので気にしないでください。
これ、どこかおかしいところありますか・・・?