カレンダーのプログラム
指定した開始月と終了月を入力して、それを横に最大3つまで並べて
納まりきらないときは改行するというプログラムを作りたいです。
イメージとしては、2009年の9月から2009年の12月まで指定した場合は…
2009 / 9 2009 / 10 2009 / 11
1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7
8 9 10 11 12 13 14 8 9 10 11 12 13 14 8 9 10 11 12 13 14
15 16 17 18 19 20 21 15 16 17 18 19 20 21 15 16 17 18 19 20 21
21 22 23 24 25 26 27 21 22 23 24 25 26 27 21 22 23 24 25 26 27
28 29 30 28 29 30 31 28 29 30
2009 / 12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
21 22 23 24 25 26 27
28 29 30 31
(最初の日数などは適当ですし、ちょっとずれてしまっていますがご了承ください。あくまでもイメージなので…)
ところが下のプログラムを動作させようとしたところ全く
動きません。何がおかしいために動作しないのでしょうか?
よろしくお願いします。
#include<stdio.h>
#include<string.h>
int getyoubi(int year,int month,int day)
{
if(month==1 || month==2 )
{
year--;
month +=12;
}
return ((year+year/4-year/100+year/400+(13*month+8)/5 + day)%7);
}
int main(void)
{
int nen1,tuki1,nen2,tuki2,tukiho,nenho,tukih,w,i,j;
char sbuf[3][7][22];
int tuki[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int k;
char tmp[4];
printf("カレンダーを表示します。\n");
printf("開始年月を入力せよ。\n");
printf("年:");
scanf("%d",&nen1);
printf("月:");
scanf("%d",&tuki1);
printf("終了年月を入力せよ。\n");
printf("年:");
scanf("%d",&nen2);
printf("月:");
scanf("%d",&tuki2);
do{
/*3つのカレンダー分の格納する*/
for(i=0;i<3;i++)
{
w=getyoubi(nen1,tuki1,1);
sprintf(sbuf[i][0],"%10d /%3d ",nen1,tuki1);
for(k=1;j<7;k++)
{
sbuf[i][k][0]='\0';
}
sprintf(sbuf[i][1],"%*s",3*w,"");
k=1;
for(j=1;j<tuki[tuki1];j++)
{
sprintf(tmp,"%3d",j);
strcat(sbuf[i][k],tmp);
if(j%7==6)
{
k++;
}
}
do{
if(j%7==6)
{
sprintf(sbuf[i][k],"%21s","");
}
else
{
do{
strcat(sbuf[i][k]," ");
j++;
}while(j%7!=6);
k++;
}
}while(k!=7);
tuki1++;
if(tuki1==13)
{
tuki1=1;
nen1++;
}
if(nen1>nen2 || nen1==nen2 && tuki1>tuki2)
{
break;
}
}
/*3つためたカレンダーを出力する。*/
for(i=0;i<3;i++)
{
printf("%s",sbuf[i][0]);
}
printf("\n");
for(i=0;i<3;i++)
{
printf(" 日 月 火 水 木 金 土 ");
}
printf("\n");
for(i=0;i<3;i++)
{
printf("----------------------");
}
printf("\n");
for(i=1;i<7;i++)
{
for(j=0;j<3;j++)
{
printf("%s",sbuf[j][i]);
}
}
/*指定した年の月になるまでループ*/
}while(nen1<nen2 || nen1==nen2 && tuki1<=tuki2);
return 0;
}
お礼
当然SUNのAPIリファレンスや文献など目を通しています。それでわからないから質問しています。 そもそもド素人なので回答の中にある「CLDC」の意味さえわかりません。 そんな人間は開発や質問してはいけませんか? Calenderがミソかなとは思いましたが、あれこれやってもビルドで怒られました。 早速試してみます。 ありがとうございました。