C言語関係掲示板

過去ログ

No.432.カレンダーの表示

[戻る] [ホームページ]
No.3060

キーボードから西暦年および月を入力して、その月のカレンダーを表示させたい
投稿者---ノリ(2002/10/23 02:26:09)


関数を使って作りたいのですが、西暦と月を入力する。入力時のチェックを行い
入力時がただしく無い場合は再入力。させたいのですが、mainから上手く関数を呼び出せません。どのよにすれば良いですか?
関数 input

input(int y,int m)
{
int year,month /*西暦年と月の入力*/

while(1)
printf("生年暦を入力;");
scanf("%d %d",&year,&month);
if((year>=1000)&&(year=<9999))&&((month<1)&&(month>=12))
break;
printf("再入力指示");
}
*y=year;
*m=month:
}
ここまでやってメインで返せません

No.3063

Re:キーボードから西暦年および月を入力して、その月のカレンダーを表示させたい
投稿者---かずま(2002/10/23 03:41:53)


#include <stdio.h>
#include <stdlib.h>

void input(int *y, int *m)
{
    for (;;) {
        printf("西暦年と月を入力: ");
        if (scanf("%d%d", y, m) == 2 &&
            *y >= 1752 && *y <= 9999 && *m >= 1 && *m <= 12) return;
        scanf("%*[^\n]"); /* skip to the end of the line */
    }
}

void cal(int y, int m)
{
    int d = 30 + (0x15aa >> m & 1);
    if (m == 2) d = 28 + (y%4==0 && y%100 || y%400==0);
    y -= m < 3;
    y = (y + y/4 - y/100 + y/400 + ".143614625035"[m] - '0') % 7;
    printf("\n日 月 火 水 木 金 土\n%*s", y*3, "");
    for (m = 1; m <= d; m++) printf("%2d%c", m, " \n"[++y%7==0]);
    puts("\n" + (y >= 35));
}

int main()
{
    int year, month;

    input(&year, &month);
    cal(year, month);
    return 0;
}


No.3067

Re:キーボードから西暦年および月を入力して、その月のカレンダーを表示させたい
投稿者---ノリ(2002/10/23 11:19:14)


かずまさま
ありがとうございます!!
とても、綺麗でわかりやすいです。
これを、参考にして色々工夫してみます