万年カレンダー
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");
}
}