万年カレンダー
Posted: 2007年7月19日(木) 21:50
こんばんは。今学校の課題で、万年カレンダーのプログラムを作成しているのですが、プログラムの組み方が悪いのか上手くいきません。それ以前にコンパイルエラーになるのですが・・・。
長いですが、全文はっておきますのでご指摘、助言をお願いします。
長いですが、全文はっておきますのでご指摘、助言をお願いします。
#include <stdio.h> /******************************************/ void ym_input(int *year, int *month); int get_day_of_week(char *date); void cal_disp(int year,int month, int dayofweek); /******************************************/ char *dp,date[8] = {0,0,0,0,0,0,0,0}; int *yp, *mp; int year,month,day,dayofweek; /******************************************/ int main(void) { yp = date[0]; mp = date[4]; ym_input(yp,mp); date[6] = '0'; date[7] = '1'; dp = date[0]; dayofweek = get_day_of_week(dp); cal_disp(year,month,dayofweek); return 0; } /******************************************/ void ym_input(int *year, int *month) { printf("表示させたいカレンダーの年を西暦で入力してください\nただし入力可能範囲は1583~3999年とする ->"); while('15830000'>=date || '39990000'<=date){ scanf("%d",&year); if('15830000'>=date || '39990000'<=date) printf("Error:入力値が正しくありません\n"); } printf("表示させたいカレンダーの月を入力してください ->"); while('0100'>=*month || '1200'<=*month){ scanf("%d",&month); if('0100'>=*month || '1200'<=*month) printf("Error:入力値が正しくありません\n"); } } /******************************************/ int get_day_of_week(char *date) { int i,d[8],a; int *j; j = d[0]; for(i=0;i<8;i++) { *(j + i) = *(date + i) - 48; } year = d[0] * 1000 + d[1] * 100 + d[2] * 10 + d[3]; month = d[4] * 10 + d[5]; day = d[6] * 10 + d[7]; a=(year+(year/4)-(year/100)+(year/400) + ((13 * month)+8)/5)+day)%7 ; return a; } /******************************************/ void cal_disp(int year,int month, int dayofweek) { int i,j,a,max,flag,cal[6][7]={ {" "," "," "," "," "," "," "}, {" "," "," "," "," "," "," "}, {" "," "," "," "," "," "," "}, {" "," "," "," "," "," "," "}, {" "," "," "," "," "," "," "}, {" "," "," "," "," "," "," "} }; switch(month){ case 2 : { if((year%4==0&&!(year%100==0))||year%400==0) max=29; else max=28; break; } case 4 : case 6 : case 9 : case 11 : { max=30; break; } default : { max=31; break; } } a=0; flag=0; for(i=0;i<6||flag==1;i++){ for(j=0;j<7||flag==1;j++){ if(i=0) j=dayofweek; cal[j]=a++; if(a==max) flag=1; } } printf("%.4d年 %.2d月\n",year,month); printf("日 月 火 水 木 金 土\n"); for(i=0;i<6||flag==1;i++){ for(j=0;j<7||flag==1;j++){ if(cal[j]=" ") printf(" "); else printf("%.2d",cal[j]); printf(" "); } printf("\n"); } }