- ベストアンサー
カレンダープログラム、曜日の出力について。
西暦、月、日(1900年1月1日以降対象)を入力して、曜日を求めるプログラムを考えています。 過去の質問なども参考にしたんですが、プログラムがうまく動かず困っています。 プログラム中コメントの日数を変える辺りに不備があるかと思い色々試しましたが、曜日がずれてしまいますし開始1900年1月1日も月曜なのに水曜と出力されます。 forやifの条件の記述がおかしいのでしょうか? なにか根本的な所が欠如しているのでしょうか、回答をよろしくお願いします。 始めのgetsの所はあえてです。 #include<stdio.h> #include<stdlib.h> int main(void) { char ss[9],cop1[5],cop2[3],cop3[3]; int year,manth,day,aa,cc,i,f; gets(ss); ss[8] = 0; cop1[4] = 0; cop2[2] = 0; cop3[2] = 0; for(i = 0;i <= 3;i++){ cop1[i] = ss[i]; } for(i = 0;i <= 1;i++){ cop2[i] = ss[i+4]; } for(i = 0;i <= 1;i++){ cop3[i] = ss[i+6]; } year = atoi(cop1); manth = atoi(cop2); day = atoi(cop3); printf("%d年%d月%d日",year,manth,day); for(f = 1900; f <= year; f++){ //閏年か平年で日数を変える if((year%4) == 0 && year != 1900){ aa += 366; } else{ aa += 365; } } if((year%4) == 0 && manth >= 3 ){//閏年かつ3月以降日数+1 aa += 1; } switch(manth){ case 1: cc = (aa + day)%7; break; case 2: cc = (aa + 31 +day)%7; break; case 3: cc = (aa + 59 +day)%7; break; case 4: cc = (aa + 90 +day)%7; break; case 5: cc = (aa + 120 +day)%7; break; case 6: cc = (aa + 151 +day)%7; break; case 7: cc = (aa + 181 +day)%7; break; case 8: cc = (aa + 212 +day)%7; break; case 9: cc = (aa + 243 +day)%7; break; case 10: cc = (aa + 273 +day)%7; break; case 11: cc = (aa + 304 +day)%7; break; case 12: cc = (aa + 334 +day)%7; break; } switch(cc){ case 1: printf(" (月)"); break; case 2: printf(" (火)"); break; case 3: printf(" (水)"); break; case 4: printf(" (木)"); break; case 5: printf(" (金)"); break; case 6: printf(" (土)"); break; case 0: printf(" (日)"); break; } return 0; }
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (8)
- Oh-Orange
- ベストアンサー率63% (854/1345)
- noocyte
- ベストアンサー率58% (171/291)
- noocyte
- ベストアンサー率58% (171/291)
- R32C
- ベストアンサー率39% (115/290)
- burroughs6
- ベストアンサー率76% (29/38)
- asuncion
- ベストアンサー率33% (2127/6290)
- redfox63
- ベストアンサー率71% (1325/1856)
- asuncion
- ベストアンサー率33% (2127/6290)
お礼
2次元配列を使ったり、do-whileにもこんな使い方があるんですね。 サンプルまで書いて頂いてありがとうございました。