どこがおかしいか教えてください(;_;)
#include <stdio.h>
void main()
{
typedef struct kokyaku_data
{
int k_code; // 顧客コード
short h_nen,h_tsuki,h_hi; // 発行年月日
short k_nen,k_tsuki,k_hi; // 使用期限
}KOKYAKU;
KOKYAKU kokyaku;
printf("顧客コードを入力してください\n");
scanf("%d",&kokyaku.k_code);
// 顧客構造体へ日付をセットする
printf("今年の西暦入力してください(YYYY MM DD):");
scanf("%d %d %d",&kokyaku.h_nen,&kokyaku.h_tsuki,&kokyaku.k_hi);
if(kokyaku.h_tsuki == 4 || kokyaku.h_tsuki ==6 || kokyaku.h_tsuki == 9 || kokyaku.h_tsuki == 11){
kokyaku.k_hi=30;
kokyaku.h_tsuki=1;
}
kokyaku.k_tsuki=kokyaku.h_tsuki;
}else
if((kokyaku.h_tsuki==3) && (kokyaku.h_hi==1)){
if((kokyaku.k_nen) % 400 ==0 || (kokyaku.k_nen)%4==0 && (kokyaku.k_nen)%100!=0){
kokyaku.k_tsuki=kokyaku.h_tsuki-1;
kokyaku.k_hi=29;
}else{
kokyaku.k_tsuki=kokyaku.h_tsuki-1;
kokyaku.k_hi=28;
}
}else{
kokyaku.k_hi=30;
if(kokyaku.h_tsuki = 1){
kokyaku.k_tsuki=12;
}
}
printf("%d %d %d",kokyaku.k_nen,kokyaku.k_tsuki,kokyaku.h_hi);
}
FILE *ds;
ds=fopen("../datafile/d_stock","w");
無題
-
バグ
Re:無題
#include <stdio.h>
// 年月日格納用構造体
typedef struct tag_YMD
{
short Year;
short Month;
short Day;
} YMD;
// 顧客管理用構造体
typedef struct tag_KOKYAKU
{
int Code; // 顧客コード
YMD Public; // 発行日
YMD Limit; // 使用期限
} KOKYAKU;
// メイン関数
void main()
{
KOKYAKU Kokyaku;
// 顧客コードの入力
printf("顧客コードを入力してください");
scanf("%d",&Kokyaku.Code);
// 発行年月日の入力
printf("今年の西暦入力してください(YYYY MM DD):");
scanf("%d %d %d",&Kokyaku.Public.Year, &Kokyaku.Public.Month, &Kokyaku.Public.Day);
// 使用期限年の計算
Kokyaku.Limit.Year = Kokyaku.Public.Year + 1;
// 発行日が1日だった場合の処理
if (Kokyaku.Public.Day == 1)
{
// 末日の計算
if (Kokyaku.Public.Month == 5 || Kokyaku.Public.Month == 7 || Kokyaku.Public.Month == 10 || Kokyaku.Public.Month == 12)
{
// 入力された月が、5、7、10、12月だった場合、1ヶ月前の末日は30日となる
Kokyaku.Limit.Day = 30;
}
else if (Kokyaku.Public.Month == 3)
{
// 入力された月が3月だった場合は、前月が2月なので閏年の計算を行う
if ((Kokyaku.Limit.Year % 400 == 0 || Kokyaku.Limit.Year % 4 == 0) && Kokyaku.Limit.Year % 100 != 0)
{
Kokyaku.Limit.Day = 29;
}
else
{
Kokyaku.Limit.Day = 28;
}
}
else
{
Kokyaku.Limit.Day = 31;
}
// 使用期限月の計算
if (Kokyaku.Public.Month == 1)
{
// 1月だった場合の処理
Kokyaku.Limit.Year--;
Kokyaku.Limit.Month = 12;
}
else
{
Kokyaku.Limit.Month = Kokyaku.Public.Month - 1;
}
}
else
{
Kokyaku.Limit.Month = Kokyaku.Public.Month;
Kokyaku.Limit.Day = Kokyaku.Public.Day - 1;
}
printf("使用期限 : %04d年 %02d月 %02d日\n", Kokyaku.Limit.Year, Kokyaku.Limit.Month, Kokyaku.Limit.Day);
}