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;
}

//按照你的原始代码修改(一定要有完备的括号)
#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;
}

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