質問: 1582年10月14日以前の日付が入力されたとき、「それ以前の日数には対応していません」と出力される、 つまり、その日以降の曜日を出力するという条件下で、 西暦、月、日付を入力することにより、その日の曜日を出力するプログラムを作成したいのですが、 「1582年10月14日以前」と「1582年10月14日以降」を区別してくれるプログラムの作成方法がよくわからず、 たとえば2001年1月12日のように入力してしまうと 「1582年10月14日以前には対応していません」 と出力されてしまいます。 私は以下のようにプログラムを作成しました。 (なお、今回用いた手法は「ツェラーの公式」です。) ``` #include int main(void) { int year,m,q,k,j,h; k=year%100; j=year/100; h=(q+(m+1)*26/10+k+k/4+j/4+5*j)%7; printf("年: "); scanf("%d", &year); printf("月: "); scanf("%d", &m); printf("日: "); scanf("%d", &q); /* 1582年10月15日以後が入力されたとき */ if(year>=1582 &&( m>=10 || q>=15 )&& h==1){ printf("%4d年%2d月%2d日は日曜日です ", year, m, q); } else if(year>=1582 && (m>=10 || q>=15) && h==2){ printf("%4d年%2d月%2d日は月曜日です ", year, m, q); } else if(year>=1582 && (m>=10 || q>=15) && h==3){ printf("%4d年%2d月%2d日は火曜日です ", year, m, q); } else if(year>=1582 && (m>=10 || q>=15) && h==4){ printf("%4d年%2d月%2d日は水曜日です ", year, m, q); } else if(year>=1582 && (m>=10 || q>=15) && h==5){ printf("%4d年%2d月%2d日は木曜日です ", year, m, q); } else if(year>=1582 && (m>=10 || q>=15) && h==6){ printf("%4d年%2d月%2d日は金曜日です ", year, m, q); } else if(year>=1582 && (m>=10 || q>=15) && h==7){ printf("%4d年%2d月%2d日は土曜日です ", year, m, q); } /* 1582年10月14日以前が入力されたとき */ else{ printf("1582年10月14日以前には対応していません\n"); } return 0; } ``` 実行結果 $ ./a.out 年: 2001 月: 1 日: 12 1582年10月14日以前には対応していません if()の()の部分をどのように修正すればいいのでしょうか。
回答: 自分の質問に回答します。(解決したので) metropolisさんの言うように、その三行の位置を、if文の上に持ってくると、期待されている結果となりました。