ZTY9820
2021-04-23 00:09
采纳率: 57.1%
浏览 56

C语言 大佬们这个代码为什么只能运行一半啊啊啊

萌新一枚,向大佬们求救

这是一个判断日期是否有效的代码

#include<stdio.h>
int main(void)
{
    int d; //day
    int m; //month
    int y; //year
    printf("Input a date.(dd-mm-yyyy)\n");
    scanf("%d-%d-%d",&d,&m,&y);

    if (m<=12 && d<=31)
    {
    if ((m==4 || m==6 || m==9 || m==11))
    if (d<=30)
    {
        printf("The date is: %d/%d/%d",d,m,y);
    }

    else
    {
        printf("Wrong date.");
    }
    }

    else if (m==2)

    {
    if (((0 == y%4) && (0 != y%100))||(0 == y %400))
    if (d<=29)
    {
        printf("The date is:%d/%d/%d",d,m,y);
    }

    else
    {
        printf("Wrong date.");
    }
    }

    else
    {
        printf("Das Datum ist korrekt.%d/%d/%d",d,m,y);
    }

    return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 雷鬼007 2021-04-23 00:44
    已采纳
    //按照你的原始代码修改(一定要有完备的括号)
    #include<stdio.h>
    int main(void)
    {
        int d; //day
        int m; //month
        int y; //year
        printf("Input a date.(dd-mm-yyyy)\n");
        scanf("%d-%d-%d",&d,&m,&y);
    
        if (m<=12 && d<=31) {
            if ((m==4 || m==6 || m==9 || m==11)) {
                if (d<=30) {
                    printf("The date is: %d/%d/%d",d,m,y);
                } else {
                    printf("Wrong date.");
                }
            } else if (m==2) {
                if (((0 == y%4) && (0 != y%100))||(0 == y %400)) {
                    if (d<=29) {
                        printf("The date is:%d/%d/%d",d,m,y);
                    } else {
                        printf("Wrong date.");
                    }
                }
            } else {
                printf("Das Datum ist korrekt.%d/%d/%d",d,m,y);
            }
        }
        return 0;
    }
    
    /* 写代码一定要注意编程规范(尤其是花括号和小括号,不要嫌多)和逻辑层次,用最简单的代码解决问题才是最厉害的,请参考*/
    #include<stdio.h>
    
    static inline int IsLeapYear(int y)
    {
        return (((0 == y % 4) && (0 != y % 100)) || (0 == y % 400));
    }
    
    int main(void)
    {
        int d; //day
        int m; //month
        int y; //year
    
        int dayCheck[] = {31,29,31,30,31,30,31,31,30,31,30,31};
    
        printf("Input a date.(dd-mm-yyyy)\n");
    
        scanf("%d-%d-%d",&d,&m,&y);
    
        if ((m < 1) || (m > 12)) {
            printf("Wrong date.");
            return 0;
        }
    
        if (d > dayCheck[m - 1]) {
            printf("Wrong date.");
            return 0;
        }
    
        if ((!IsLeapYear(y)) && (m == 2) && (d > 28)) {
            printf("Wrong date.");
            return 0;
        }
    
        printf("The date is:%d/%d/%d",d,m,y);
        return 0;
    }
    点赞 1 打赏 评论
  • C和C++技术博客 2021-04-26 19:57

    C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
    C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

    点赞 打赏 评论

相关推荐 更多相似问题