|
年月などを入れてカレンダーを作る事はできたんですが
今度それに行事などをいれようと思っています。
カレンダーは以下のように作ったのですが
その行事をいれるのにファイルを作って
例えば2005.1.txtに何日になにがあると入力していたら
プログラムを実行したときにファイル名をかいたらそれが出力させるようにしたいと思っています。アドバイスをお願いします。
#include <stdio.h>
void print(int ca[12][24][7]) //配列で12は月、6は最大の週、7は一週間の日数
{
int a,b,c;
for(a=0;a<24;a++){
for(b=0;b<1;b++){
for(c=0;c<7;c++){
if(ca[b][a][c]){
printf("%10d ", ca[b][a][c]); //配列に関係するときその数字を入力
}
else{
printf(" "); //それ以外の時はスペース
}
}
}
printf("\n");
}
}
int number(int y,int m){
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(m==2 && y%4==0 && (y%100 != 0 || y%400==0)){ //うるう年の計算
return 29;
}
else{
return days[m-1]; //うるう年以外の2月の表示28
}
}
int nissu(int y,int m,int d){
if(m<=2){
y--;
m +=12;
}
return (y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
}
int first(int y,int m){
return nissu(y,m,1);
}
int main(void)
{
int ca[12][24][7]={0};
int y,m,d,e,days,youbi;
printf("カレンダーを表示する年を入力 : ");
scanf("%d",&y);
printf("カレンダーを表示する月を入力 : ");
scanf("%d",&m);
days=number(y,m);
youbi = first(y,m);
e=0; //最初の数値を0とし、日数は1からその月の最大
for(d=1;d<=days;d++){ //までいき、それを配列と連結させて、youbiが7に
ca[m-1][e][youbi] = d; //なったらyoubiを0に戻し、eを追加する
if(++youbi == 7){
youbi =0;
e +=4;
}
}
printf("%40年\n\n",y);
printf("%40d月\n"" 日 月 火 水 木 金 土\n",m);
print(&ca[m-1]);
return 0;
}
|