C言語関係掲示板

過去ログ

No.438.日付を入力し元号形式で表示

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

はじめまして\(^.^)/
投稿者---PaPa(2002/10/24 13:47:33)


はじめまして!
いろいろとC言語をやっているのですが、わからなくなってしまいました。
それは日付を入力したときに元号形式で表示するというプログラムなんですけども、どうしたらいいかわかりません。どうか教えていただきたいです!
よろしくお願いしまーすm(_ _)m



No.3112

はじめまして\(^.^)/追加記入です!
投稿者---PaPa(2002/10/24 14:04:46)


>はじめまして!
>いろいろとC言語をやっているのですが、わからなくなってしまいました。
>それは日付を入力したときに元号形式で表示するというプログラムなんですけども、どうしたらいいかわかりません。どうか教えていただきたいです!
>よろしくお願いしまーすm(_ _)m
>
↓このようにプログラムを作成したのですが...
#include <stdio.h>

typedef struct
{
	int year;
	int month;
	int day;
}ad_date;

void put_ad_date_gen(ad_date x);

void main(void)
{
	ad_date hi;

	printf("日付を入力(入力例:2002 1 1)");
	scanf("%d %d %d",&hi.year, &hi.month, &hi.day);

	put_ad_date_gen(hi);
}

void put_ad_date_gen(ad_date x)
{
	if(1989 <= x.year )
	{
		if(1989 == x.year)
		{
			printf("平成元年 %d/%d\n",x.month, x.day);
		}
		else
		{
			printf("平成%d %d/%d\n",x.year-1988, x.month, x.day);
		}
	}
	if(1926 <= x.year && x.year <= 1988)
	{
		if(1926 == x.year)
		{
			printf("昭和元年 %d/%d\n",x.month, x.day);
		}
		else
		{
			printf("昭和%d %d/%d\n",x.year-1925, x.month, x.day);
		}
	}
	if(1912 <= x.year && 1925 <=x.month)
	{
		if(1926 == x.year)
		{
			printf("大正元年 %d/%d\n", x.month, x.day);
		}
		else
		{
			printf("大正%d %d/%d\n",x.year-1911, x.month, x.day);
		}
	}
	if(1911 >= x.year)
	{
		if(1868 == x.year)
		{
			printf("明治元年 %d/%d\n",x.month, x.day);
		}
		else
		{
			printf("明治%d %d/%d\n",x.year-1867, x.month, x.day);
		}
	}
	//元号形式で表示
	//明治元年1868年 大正元年1912年 昭和元年1926年 平成元年1989年
}


No.3119

Re:はじめまして\(^.^)/追加記入です!
投稿者---たく(2002/10/24 19:41:36)


アドバイスできるほど理解してるってわけでもないんですけど
簡単なミスでしたので、修正してみました。
どこを直したかは自分で探してみてください^^;

#include <stdio.h>

typedef struct
{
	int year;
	int month;
	int day;
}ad_date;

void put_ad_date_gen(ad_date x);

void main(void)
{
	ad_date hi;

	printf("日付を入力(入力例:2002 1 1)");
	scanf("%d %d %d",&hi.year, &hi.month, &hi.day);

	put_ad_date_gen(hi);
}

void put_ad_date_gen(ad_date x)
{
	if(1989 <= x.year )
	{
		if(1989 == x.year)
		{
			printf("平成元年 %d/%d\n",x.month, x.day);
		}
		else
		{
			printf("平成%d %d/%d\n",x.year-1988, x.month, x.day);
		}
	}
	else if(1926 <= x.year && x.year <= 1988)
	{
		if(1926 == x.year)
		{
			printf("昭和元年 %d/%d\n",x.month, x.day);
		}
		else
		{
			printf("昭和%d %d/%d\n",x.year-1925, x.month, x.day);
		}
	}
	else if(1912 <= x.year && 1925 >=x.year)
	{
		if(1912 == x.year)
		{
			printf("大正元年 %d/%d\n", x.month, x.day);
		}
		else
		{
			printf("大正%d %d/%d\n",x.year-1911, x.month, x.day);
		}
	}
	else if(1911 >= x.year)
	{
		if(1868 == x.year)
		{
			printf("明治元年 %d/%d\n",x.month, x.day);
		}
		else
		{
			printf("明治%d %d/%d\n",x.year-1867, x.month, x.day);
		}
	}
	//元号形式で表示</em>
	//明治元年1868年 大正元年1912年 昭和元年1926年 平成元年1989年</em>
}


No.3129

Re:はじめまして\(^.^)/追加記入です!
投稿者---papa(2002/10/24 23:28:03)


アドバイス有り難うございますm(_ _)m
これから間違ったところきちんと理解し、頑張っていきたいとおもいます!

No.3131

Re:はじめまして\(^.^)/追加記入です!
投稿者---papa(2002/10/24 23:42:14)


簡単なミスでした!!
if文のところで 1925 <= x.monthのところでした。
今度からこういったミスを減らしていかないとダメですね!
頑張ります!!
そしてありがとうございました!

No.3127

Re:はじめまして\(^.^)/追加記入です!
投稿者---かずま(2002/10/24 22:50:45)


#include <stdio.h>

typedef struct { char *name; int year, month, day; } Era;

Era era[] = {
    { "平成", 1989,  1,  8 },
    { "昭和", 1926, 12, 25 },
    { "大正", 1912,  7, 30 },
    { "明治", 1868,  9,  8 },
};

typedef struct { int year, month, day; } ad_date;

void put_ad_date_gen(const ad_date *x)
{
    int i;

    for (i = 0; i < 4; i++) {
        if (x->year > era[i].year) {
            printf("%s%d %d/%d\n", era[i].name,
                x->year - era[i].year + 1, x->month, x->day);
            break;
        }
        if (x->year == era[i].year && (x->month > era[i].month ||
                x->month == era[i].month && x->day >= era[i].day)) {
            printf("%s元年 %d/%d\n", era[i].name, x->month, x->day);
            break;
        }
    }
}

int main()
{
    ad_date hi;

    while (printf("\n日付を入力(入力例:2002 1 1 [q で終了]) "),
            scanf("%d%d%d", &hi.year, &hi.month, &hi.day) == 3)
        put_ad_date_gen(&hi);
    return 0;
}


No.3130

Re:はじめまして\(^.^)/追加記入です!
投稿者---papa(2002/10/24 23:31:28)


アドバイス有り難うございます!プログラムはほんと奥が深いとおもいました!
こういったプログラム方法もあるんだなと考えさせられてしまい、もっと勉強したいと思います!本当に有り難うございましたm(_ _)m

No.3149

アドバイスありがとうございましたm(_ _)m
投稿者---PaPa(2002/10/25 23:58:43)


なんとかうまくいきました!これからもお世話になります!!
よろしくお願いします!!