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

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助