質問: *y - 1; } } int main() { int y, m, d; //西暦月日の入力 printf("西暦は?\n"); scanf("%d", &y); printf("月は?\n"); scanf("%d", &m); printf("日は?\n"); scanf("%d", &d); //前の日の出力 printf("%d年%d月%d日の前の日は", y, m, d); yesterday(&y, &m, &d); printf("%d年%d月%d日です。\n", y, m, d); return 0; } ``` ### 試したこと //前の月の計算 の所が問題なのはわかるんですが、どう直したらいいのかわかりません。 if文で*dが~の時に*m - 1にしたらいいのでしょうか?
回答: 月をまたぐ処理は入力された日付が「1」の場合のみ、のはずですが、それと関係なく月を一律前月にしてしまっているのが問題。 ``` //前の日の計算 *d = *d - 1; if(*d==0){ if(*m==3){ *d = feb; }else if(*m==5 || *m==7 || *m==10 || *m==12){ *d = 30; }else *d = 31; *m = *m - 1; // <- ここで月またぎ分を減算 } //前の月の計算 //*m = *m - 1; // <- ここは不要 if(*m==0){ *m = 12; *y = *y - 1; } ```