c语言判断日期合法性

你将需要判断这个日期在我们的公历体系内是否真实存在。如果存在则输出YES,否则输出NO。
测试程序给出的测试输入数据中,年、月、日都是正整数(也就是大于零的整数),均不大于 300030003000。

求帮看哪里有问题,提示通过三组,还差一组通不过...

#include <stdio.h>
int main(){
int year, month, day;
scanf("%d-%d-%d", &year, &month, &day);
if(year >=0 && year <= 3000){

if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 && year % 100 == 0){
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 ){
if(day > 0 && day <= 31){
printf("YES");
}else{
printf("NO");
}
}else if(month == 4 || month == 6 || month == 9 || month == 11){
if(day > 0 && day <= 30){
printf("YES");
}else{
printf("NO");
}
}else if(month == 2){
if(day > 0 && day <= 29){
printf("YES");
}else{
printf("NO");
}
}
}else{
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 ){
if(day > 0 && day <= 31){
printf("YES");
}else{
printf("NO");
}
}else if(month == 4 || month == 6 || month == 9 || month == 11){
if(day > 0 && day <= 30){
printf("YES");
}else{
printf("NO");
}
}else if(month == 2){
if(day > 0 && day <= 28){
printf("YES");
}else{
printf("NO");
}
}
}
}else{

printf("NO");
}
}

第1个回答  2016-09-19

手边没有IDE,查错有点费事,写了一个

#include <stdio.h>
void yes();
void no();
int main(void)
{
    int year,month,day;
    printf("Please Input Data Like 1992-04-03:\n");
    scanf("%d-%d-%d",&year,&month,&day);
    if(year < 0 || year > 3000 || day > 31 || day < 0 || month > 12 || month < 0 )
    {
        printf("Please Input Right Number!\n");
        return -1;
    }
    if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
    {
        if(day > 0 && day <= 31)
        {
            yes();
        }
        else
        {
            no();
        }
    }
    else if(month == 2)
    {
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 && year % 100 == 0)
        {
            yes();
        }
        else
        {
            no();
        }
    }
    else
    {
        if(day > 0 && day < 31)
        {
            yes();
        }
        else
        {
            no();
        }
    }
    return 0;
}
void yes()
{
    printf("YES\n");
}
void no()
{
    printf("NO\n");
}

本回答被网友采纳
第2个回答  2016-09-19
第28行 }else{ if 中间这个{是什么意思
相似回答