问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言中 求解如何判断输入的年月日是否合理

发布网友 发布时间:2023-03-13 21:53

我来回答

5个回答

热心网友 时间:2023-11-12 20:16

代码里面的主要问题时:

if((month==1,3,5,7,8,10,12)这样的判断语句是有问题,应该使用||运算符的;

if和else语句没有配合好,主要是你的代码嵌套比较多,一定要注意代码缩进,否则自己可能都没有发现那个地方else没有写的。。


下面的代码,是修改后,运行结果附在后面:

#include<stdio.h>

#include<stdlib.h>
int main()
{
    int year,month,day,sum;
    printf("输入年月日(例如:2013.4.5):");
    scanf("%d,%d,%d",&year,&month,&day);
   
    if(year>0&&month<=12)
    {
        if(((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))&&(day<0||day>31))
        {
            printf("该月不存在输入的天数,请重新输入1\n");
        }
        else if(((month==4)||(month==6)||(month==9||11))&&(day<0||day>30))
        {
            printf("该月不存在输入的天数,请重新输入2\n");
        }    
        else if(month==2)
        {
            if(((year%4==0&&year%100!=0)||year%400==0)&&(day<0||day>29))
            {
               printf("二月不存在输入的天数,请重新输入3\n");
            }
            else
            {
                if(((year%4!=0&&year%100!=0)||year%400!=0)&&(day<0||day>28))
                {
                    printf("二月不存在输入的天数,请重新输入4\n");
                }
        
            }
        }
        else   
        {        
            switch(month)
            {
                case 1:sum=0;break;
                case 2:sum=31;break;
                case 3:sum=59;break;
                case 4:sum=90;break;
                case 5:sum=120;break;
                case 6:sum=151;break; 
                case 7:sum=181;break; 
                case 8:sum=212;break; 
                case 9:sum=243;break; 
                case 10:sum=273;break; 
                case 11:sum=304;break; 
                case 12:sum=334;break; 
            }
            sum+=day;
            if(((year%4==0&&year%100!=0)||year%400==0)&&(month>2))
            {
                sum++;
                printf("这是%d年的第%d天\n",year,sum);
            }
            else
            {
                printf("这是%d年的第%d天\n",year,sum);
            }
        } 
    }
    
    system("pause");
    return 0;
}

运行结果为:

热心网友 时间:2023-11-12 20:16

#include <stdio.h>

#include <stdlib.h>

void main( ) {

    int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    int year, month, day, sum, leap, i;

    printf("输入年月日(例如:2013-4-5):");

    scanf("%d-%d-%d", &year, &month, &day);

    if(year < 1 || month < 1 || month > 12) {

        printf("不合理的年或月!\n");

        return;

    }

    leap = (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));

    if((day < 1 || day > mon[month]) && ((month != 2) || ((month == 2) && (day > mon[month] + leap)))) {

        printf("不合理的日期\n");

        return;

    }

    for(sum = 0, i = 1; i < month; i++)

        sum += mon[i];

    sum += day + leap;

    printf("%d-%d-%d是%d年的第%d天!", year, month, day, year, sum);

    system("pause");

}

热心网友 时间:2023-11-12 20:17

//以下代码经调试,完全正确。
#include <stdio.h>
#include<stdlib.h>
int main()
{
int year,month,day;
int sum = 0;
int leap,error=0;
int flag=0;
do{
printf("请输入 年,月,日(英文标点附号,否则出错):  ");
scanf("%d,%d,%d",&year,&month,&day);
if(month<0||month>12)
{
printf("不存在该月份,请重新输入");
flag = 1;
}
//以下判断日期是否符合月份
if(((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))&&(day<0||day>31))
{   printf("该月不存在输入的天数,请重新输入\n");
flag = 1;
}
else if(((month==4)||(month==6)||(month==9||11))&&(day<0||day>30))
{   printf("该月不存在输入的天数,请重新输入\n");
flag = 1;
}
else if(month==2)

if(((year%4==0&&year%100!=0)||year%400==0)&&(day<0||day>29))
{   
    printf("该月不存在输入的天数,请重新输入\n");
    flag = 1;
}
else if(day<0||day>28)
{
    printf("该月不存在输入的天数,请重新输入\n");
    flag = 1;
}
}
}while(flag == 1);
switch(month)
{
case 1:
sum = 0;
break;
case 2:
sum = 31;
break;
case 3:
sum = 31 + 28;
break;
case 4:
sum = 31 + 28 + 31;
break;
case 5:
sum = 31 + 28 + 31 + 30;
break;
case 6:
sum = 31 + 28 + 31 + 30 + 31;
break;
case 7:
sum = 31 + 28 + 31 + 30 + 31 + 30;
break;
case 8:
sum = 31 + 28 + 31 + 30 + 31 + 30 + 31;
break;
case 9:
sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
break;
case 10:
sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
break;
case 11:
sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
break;
case 12:
sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
break;
default:
printf("month is error,please check it.");
error = 1;
break;
}

if (error != 1)
{
sum += day;

if ((year % 100 == 0 && year % 400 == 0 ) || (year % 4 == 0 && year % 100 != 0))
{
leap = 1;
}
else
{
leap = 0;
}

if (leap == 1 && month > 2)
{
sum += 1;
}

printf("it is the %d day in year.",sum);
}
system("pause");
return 1;
}

热心网友 时间:2023-11-12 20:17

你好:
经过调试修改,已可以完美运行。
你的代码有两个问题,一是输入格式有误,二是if语句有误,现将我调试后的代码发给你
希望对你有用,,,望采纳

#include<stdio.h>

#include<stdlib.h>
int main()
{
int year,month,day,sum;
printf("输入年月日(例如:2013.4.5):");
scanf("%d%*c%d%*c%d",&year,&month,&day);
if(year<0&&month>12)
return 0;
else
if((month==1,3,5,7,8,10,12)&&(day<0||day>31))
{
printf("该月不存在输入的天数,请重新输入1\n");
}
else if((month==4,6,9,11)&&(day<0||day>30))
{
printf("该月不存在输入的天数,请重新输入2\n");
}
else if(month==2)
{
if(((year%4==0&&year%100!=0)||year%400==0)&&(day<0||day>29))
{
printf("二月不存在输入的天数,请重新输入3\n");
}
else
{
if(((year%4!=0&&year%100!=0)||year%400!=0)&&(day<0||day>28))
{
printf("二月不存在输入的天数,请重新输入4\n");
}
return 0;
}
}
switch(month)
{
case 1:sum=1;break;
case 2:sum=32;break;
case 3:sum=60;break;
case 4:sum=91;break;
case 5:sum=121;break;
case 6:sum=152;break;
case 7:sum=182;break;
case 8:sum=213;break;
case 9:sum=244;break;
case 10:sum=274;break;
case 11:sum=305;break;
case 12:sum=335;break;
}
sum+=day;
if(((year%4==0&&year%100!=0)||year%400==0)&&(month>2))
{
sum++;
printf("这是%d年的第%d天\n",year,sum);
}
else
{
printf("这是%d年的第%d天\n",year,sum);
}
system("pause");
return 0;
}

热心网友 时间:2023-11-12 20:18

C语言是不支持“month==1,3,5,7,8,10,12”这种写法的,最好改用数组的方式或者switch case。
你可以先定义个数组如:
int LastDayOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

if (Month % 400 ==0 || (Month % 100 != 0 && Month % 4 == 0))
{
LastDayOfMonth[1] = 29;

}
if (0 >= Day || LastDayOfMonth[Month] < Day)
{
printf("该月不存在输入的天数,请重新输入\n");

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
请帮忙查iphone4手机的序列号dx3hnchpdp0n DX3J481PDP0N帮忙查一下 是真的吗 我不会查 大神们是翻新的? 苹果4激活日期查询 猫猫一直发情怎么办呢 如何帮助猫咪度过发情期呢? 本科英语都要过4级吗 车子中间的踏板是什么 高考400分能考哪些军事类二本 联通3g双卡双待智能导航手机 ...可以一个卡装移动2g的卡,专打电话,一个卡装联通3g流量卡吗 星兵电子书txt全集下载 星兵小说txt全集免费下载 《星兵》最新txt全集下载 星兵的txt全集下载地址 抖音网红,玩霸妈妈家庭教育,真名叫什么 做育儿的抖音号名字有哪些? 水寒水暖鱼先知花开花落春自赏是什么意思啊 “水寒水暖鱼自知,花开花败春不管”这句话是什么意思? 春江水暖鱼先知里面的鱼是什么意思 河内古今异义 荷塘里的荷叶怎么造句? 抖音害了穷人是真的吗 抖音上的很穷是真的吗 诸葛亮向后主提出的三条建议的语句是。。。 怎么拒消息但不拉黑 抖音为什么不要连续点赞 谁能帮我做一手藏头诗把《李梦维我爱你》加上 谢谢 赣南客家民俗的基本内容 宁城县特色文化 逝者如斯,来者犹未卜,把握当下,万事随缘。是 什么意思 抖音号注销了,怎么才能找回? 永生花手工diy制作方法 中国移动云盘,可以使用其他什么应用打开 有人认识这种花吗? B365M PRO-VH有蓝牙模块吗? 早晨起来后口腔有异味是怎么回事 杜甫赞美鉴湖的名言 绑定身份证怎么修改 雪的笔画顺序是什么? 如何判断一个物质水解程度大还是电离程度大 蛋清打出来的奶油能直接吃吗 鸡蛋清怎么打发成奶油 活虾可以直接放冰箱冷冻吗 诗歌:补充诗歌名句20 摆摊早餐煎糯米饭叫什么 为什么冬天的青菜会有一点甜味? 煎糯米月亮蛋 新概念1语法强化,单元26答案 谢谢 心迟眼钝 是成语吗 “砍光了、砍累了、砍钝了、砍快了、砍疼了、砍坏了” 在语法和语义上有什么异同? 微信封30天怎么马上解