ads3579 2021-04-23 00:09 采纳率: 69.2%
浏览 88
已采纳

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条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?