質問: 0; }; }; if(cnt != 0) putchar('\n'); return 0; } 実行後 2021年 9月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 このように一応カレンダーぽくは出てくるんですけど 6 がはみ出てたり、月の始まる曜日が火曜日(2021年9月は1日が水曜日) になってしまいます。 どどこを直せばいいのか分からなく困っています。 どなたか教えてください。お願いします。
回答: #include int main(void) { int day[]={31,28,31,30,31,30,31,31,30,31,30,31}; int i,cnt,y,m,d,youbi; //西暦・日付入力 do{ printf("西暦=>"); scanf("%d",&y); }while(y<1); do{ printf("月=>"); scanf("%d",&m); }while(m<1||m>12); //閏年 if(((y%4==0)&&(y%100!=0))||(y%400==0))day[1]=29; //ここで表示するのは下の方で入力された値が変更になる場合があるから、、、 printf("\n%6s%4d年%2d月\n"," ",y,m); if(m<3){ y--; m+12; } //日数計算 youbi=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7; //カレンダー表示 printf(" 日 月 火 水 木 金 土\n"); for(i=1,cnt=1;i<=youbi;i++,cnt++)printf("%3s"," "); for(i=1;i<=day[m-1];i++,cnt++){ printf("%3d",i); if(cnt%7==0)printf("\n"); } if(cnt!=0)printf("\n"); return 0; } 修正した個所が不明なので全部載せます。 曜日を求める計算式は上記のサイトを参考にしました。 cntは変数の宣言と同時に初期値を設定する必要も無いし、再初期化も不要。 2月はday[1]です。day[0]から始まりますので、、、