C言語でカレンダー作りたいです。アドバイスお願いしますm(_ _)m

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ブルーロック

C言語でカレンダー作りたいです。アドバイスお願いしますm(_ _)m

#1

投稿記事 by ブルーロック » 1年前

#include <stdio.h>

int main(void) {
int year,month,day;
// int day[13]={0,31,28,31,30,31,30,31,31};

// day={"sun,mon,tue,wed,thu,fri,sat\n"}

do{
printf("what year");
scanf("%d",&year);
}while(year < 1);

do{
printf("what month");
scanf("%d",&month);
}while(month < 1 || month > 12 );

do{
printf("what day");
scanf("%d",&day);
}while(day <1 || day > 31);

}

int zeller(int y,int m){
if(m==1){
m = 13;
}else if(m==2){
m = 14;
}

int X;
X=(y+(y/4)-(y/100)+(y/400)+((13*m+8)/5)+1)%7;
return X;
}

// int uruudosi(int year) {
// if(year % 400 == 0) return 1;
// else if(year % 100 == 0) return 0;
// }




//


コメントアウトしたやつもどうすれば良いか教えてください。

box
記事: 2002
登録日時: 13年前

Re: C言語でカレンダー作りたいです。アドバイスお願いしますm(_ _)m

#2

投稿記事 by box » 1年前

どんな出力がほしいんですか?
仮に、仮にですよ、年と月を入力してその月1ヶ月分のカレンダーが
ほしいのであればですよ、

コード:

do{
printf("what day");
scanf("%d",&day);
}while(day <1 || day > 31);

}
この入力、いらなくないですか?

コード:

int year,month,day;
// int day[13]={0,31,28,31,30,31,30,31,31};

// day={"sun,mon,tue,wed,thu,fri,sat\n"}
何で同じ変数名を使い回そうとしてるんですか?そんなことできないでしょ?
何で1ヶ月の日数が8月で終わってるんですか?9月から12月はどこ行ったんですか?
曜日の文字列をわざわざカンマ区切りで持っているのはどうしてですか?
素直に

コード:

    char *youbi[] = { "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" };
とかする方が管理しやすくないですか?

コード:

int zeller(int y,int m){
// int uruudosi(int year) {
お使いのコンパイラーは、関数の中に別の関数の実体を
書くことを許しているんですか?

コード:

// if(year % 400 == 0) return 1;
// else if(year % 100 == 0) return 0;
// }
西暦年が閏年かどうかを判定する方法は、
その年が400で割りきれるか、または、
4で割り切れて、かつ、100では割り切れないとき、閏年
それ以外は平年、です。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: C言語でカレンダー作りたいです。アドバイスお願いしますm(_ _)m

#3

投稿記事 by box » 1年前

あと、何でもかんでもmain()でやろうとしないこと。
main()は下請け関数を呼び出すことに専念して、
必要な処理はmain()から呼ばれた関数群で実施することがポイント。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: C言語でカレンダー作りたいです。アドバイスお願いしますm(_ _)m

#4

投稿記事 by box » 1年前

コード:

    char *youbi[] = { "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" };
ここなんですけどね、仮に、曜日の出力形式が
Su Mo Tu We Th Fr Sa
てな具合に1とおりしかないのであれば、わざわざ配列にせずとも

コード:

    char *youbi = "Su Mo Tu We Th Fr Sa";
でよいです。どういう風に出力したいかは質問者さん次第。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

“C言語何でも質問掲示板” へ戻る