前提・実現したいこと
C言語で、西暦 y 年 m 月 d 日の前の日の日付を求めるプログラムを書きました。
発生している問題・エラーメッセージ
日がその月の最終日でなくても、月まで-1されてしまいます。
該当のソースコード
C
1#include<stdio.h> 2 3void yesterday(int *y, int *m, int *d) 4{ 5 int feb; 6 7 //閏年かどうか 8 if(*y%4==0 && *y%100!=0 || *y%400==0){ 9 feb = 29; 10 }else feb = 28; 11 12 //前の日の計算 13 *d = *d - 1; 14 if(*d==0){ 15 if(*m==3){ 16 *d = feb; 17 }else if(*m==5 || *m==7 || *m==10 || *m==12){ 18 *d = 30; 19 }else *d = 31; 20 } 21 22 //前の月の計算 23 *m = *m - 1; 24 if(*m==0){ 25 *m = 12; 26 *y = *y - 1; 27 } 28} 29 30int main() 31{ 32 int y, m, d; 33 34 //西暦月日の入力 35 printf("西暦は?\n"); scanf("%d", &y); 36 printf("月は?\n"); scanf("%d", &m); 37 printf("日は?\n"); scanf("%d", &d); 38 39 //前の日の出力 40 printf("%d年%d月%d日の前の日は", y, m, d); 41 yesterday(&y, &m, &d); 42 printf("%d年%d月%d日です。\n", y, m, d); 43 44 return 0; 45} 46
試したこと
//前の月の計算 の所が問題なのはわかるんですが、どう直したらいいのかわかりません。
if文でdが~の時にm - 1にしたらいいのでしょうか?
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。