演習 10-2

#include <stdio.h>

void decrement_data(int *y, int *m, int *d){
    *d -= 1;
if(*d == 0){
        if(*m == 1){
            *y -= 1; *m = 13; *d = 31;
        }else if(*m == 3){
            if(((*y % 4 == 0) && (*y % 100 != 0)) || (*y % 400 == 0)){
                *d = 29;
            }else{
                *d = 28;
            }
        }else if((*m == 5) || (*m == 7) || (*m == 10) || (*m == 12)){
            *d = 30;
        }else{
            *d = 31;
        }
        *m -= 1;
}
}
void increment_data(int *y, int *m, int *d){
    *d += 1;
switch(*m){
        if(*m == 2){
            if(((*y % 4 == 0) && (*y % 100 != 0)) || (*y % 400 == 0)){
                if(*d == 30){
                    *m += 1;
                    *d = 1;
                }
}else{
                if(*d == 29){
                    *m += 1; *d = 1;
                }
            }
        }else if((*m == 4) || (*m == 6) || (*m == 9) || (*m == 11)){
            if(*d == 31){
                *m += 1;
                *d = 1;
            }
        }else if(*m == 12){
            if(*d == 32){
                *y += 1;
            }
        }else{
            if(*d == 32){
                *m += 1;
                *d = 1;
            }
        }
}
}

int main(){

    int y, m, d;

    printf("西暦何年何月何日ですか?(スペースで空けて入力):");
    scanf("%d %d %d", &y, &m, &d);

    decrement_data(&y, &m, &d);
    printf("1日戻すと%d年%d月%d日です\n", y, m, d);
   
    increment_data(&y, &m, &d);
    increment_data(&y, &m, &d);
    printf("1日進めると%d年%d月%d日で\n", y, m, d);

    return 0;
}

3 件のコメント:

  1. y.c: In function ‘increment_data’:
    y.c:25:12: warning: statement will never be executed [-Wswitch-unreachable]
    if(*m == 2){
    このようなエラーはどのように対処すればよいでしょうか。

    返信削除
    返信
    1. error ではなく warn なので特に問題なく実行できると思いますが, どのようなコードを書いているかわからないのですが, main の方で increment_data を呼んでないから increment_data が実行されないよ という warning が出ている感じでしょうか...

      削除
  2. 年末年始の日付でバグってたので修正しました
    void increment_data(int* y, int* m, int* d) {
    *d += 1;
    if (*m == 2) {
    if (((*y % 4 == 0) && (*y % 100 != 0)) || (*y % 400 == 0)) {
    if (*d == 30) {
    *m += 1;
    *d = 1;
    }
    }
    else {
    if (*d == 29) {
    *m += 1; *d = 1;
    }
    }
    }
    else if ((*m == 4) || (*m == 6) || (*m == 9) || (*m == 11)) {
    if (*d == 31) {
    *m += 1;
    *d = 1;
    }
    }
    else if (*m == 12) {
    if (*d == 32) {
    *y += 1;
    *m = 1;
    *d = 1;
    }
    }



    else {
    if (*d == 32) {
    *m += 1;
    *d = 1;
    }
    }

    }

    返信削除