|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
没找出来到底是哪里的问题编译的时候没有报错,但是2023年 11月 30日的输出就是不对;但是2000年 3月 5日的输出就没问题。
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- int a,b,c,i,j; //a,b,c表示年月日; i月的替换, j计算天数
-
- scanf("%d%d%d\n",&a,&b,&c); //输入年月日
-
- if(a%4==0 && a%400==0) //是闰年
- {
- if(b==1||3||5||7||8||10||12)
- {
- switch(b) //31天的月 :1||3||5||7||8||10||12
- {
- case 1: i=0*31;break;
- case 3: i=1*31+29;break;
- case 5: i=2*31+1*30+29;break;
- case 7: i=3*31+2*30+29;break;
- case 8: i=4*31+29;break;
- case 10: i=5*31+3*30+29;break;
- case 12: i=6*31+4*30+29;break;
- }
- }
- else if(b==4||6||9||11)
- {
- switch(b) //30天的月 :4||6||9||11
- {
- case 4: i=2*31+29;break;
- case 6: i=3*31+1*30+29;break;
- case 9: i=5*31+2*30+29;break;
- case 11: i=6*31+3*30+29;break;
- }
- }
- else if(b==2) //29天的月
- {
- i=1*31;
- }
- }
-
- else //是平年
- {
- if(b== 1||3||5||7||8||10||12) //31天的月
- {
- switch(b) //31天的月 :1||3||5||7||8||10||12
- {
- case 1: i=0*31;break;
- case 3: i=1*31+28;break;
- case 5: i=2*31+1*30+28;break;
- case 7: i=3*31+2*30+28;break;
- case 8: i=4*31+28;break;
- case 10: i=5*31+3*30+28;break;
- case 12: i=6*31+4*30+28;break;
- }
- }
- else if(b== 4||6||9||11) //30天的月
- {
- switch(b) //30天的月 :4||6||9||11
- {
- case 4: i=2*31+28;break;
- case 6: i=3*31+1*30+28;break;
- case 9: i=5*31+2*30+28;break;
- case 11: i=6*31+3*30+28;break;
- }
- }
- else if(b==2) //28天的月
- {
- i=1*31;
- }
- }
- j=i+c; //计算天数
- printf("天数为%d\n",j); //输出天数
-
- return 0;
- }
复制代码
这代码很多判断语句都是有问题的
1、scanf函数中的每个输入参数最好用空格隔开,你输入的时候通过空格即可以成功输入,我不知道你是怎么输入成功的,还有scanf是不需要\n结尾的
2、闰年判断有问题,2020年你判断不出来是闰年
3、if语句有些是不能省去的,程序不是智能的,你要明白程序是如何走的,b= 2 时,b== 1 为假,但后面的3为真,所以条件还是成立,
下面是修改后的语句,如果你喜欢编程,可以试着简化它
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- int a,b,c,i,j; //a,b,c表示年月日; i月的替换, j计算天数
-
- scanf("%d %d %d",&a,&b,&c); //输入年月日
- if(a < 0 || b <= 0 || b >12 || c <= 0 )
- {
- printf("输入日期错误\n");
- return -1;
- }
- if((a%400==0) || (a%4==0 && a%100 != 0) ) //是闰年
- {
- if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
- {
- if(c > 31)
- {
- printf("输入日期错误\n");
- return -1;
- }
- switch(b) //31天的月 :1||3||5||7||8||10||12
- {
- case 1: i=0*31;break;
- case 3: i=1*31+29;break;
- case 5: i=2*31+1*30+29;break;
- case 7: i=3*31+2*30+29;break;
- case 8: i=4*31+29;break;
- case 10: i=5*31+3*30+29;break;
- case 12: i=6*31+4*30+29;break;
- }
-
- }
- else if(b==4||b==6||b==9||b==11)
- {
- if(c > 30)
- {
- printf("输入日期错误\n");
- return -1;
- }
- switch(b) //30天的月 :4||6||9||11
- {
- case 4: i=2*31+29;break;
- case 6: i=3*31+1*30+29;break;
- case 9: i=5*31+2*30+29;break;
- case 11: i=6*31+3*30+29;break;
- }
-
- }
- else if(b==2) //29天的月
- {
- if(c > 29)
- {
- printf("输入日期错误\n");
- return -1;
- }
- i=1*31;
- }
- }
-
- else //是平年
- {
- if(b== 1||b==3||b==5||b==7||b==8||b==10||b==12) //31天的月
- {
- if(c > 31)
- {
- printf("输入日期错误\n");
- return -1;
- }
- switch(b) //31天的月 :1||3||5||7||8||10||12
- {
- case 1: i=0*31;break;
- case 3: i=1*31+28;break;
- case 5: i=2*31+1*30+28;break;
- case 7: i=3*31+2*30+28;break;
- case 8: i=4*31+28;break;
- case 10: i=5*31+3*30+28;break;
- case 12: i=6*31+4*30+28;break;
- }
- }
- else if(b== 4||b==6||b==9||b==11) //30天的月
- {
- if(c > 30)
- {
- printf("输入日期错误\n");
- return -1;
- }
- switch(b) //30天的月 :4||6||9||11
- {
- case 4: i=2*31+28;break;
- case 6: i=3*31+1*30+28;break;
- case 9: i=5*31+2*30+28;break;
- case 11: i=6*31+3*30+28;break;
- }
- }
- else if(b==2) //28天的月
- {
- if(c > 29)
- {
- printf("输入日期错误\n");
- return -1;
- }
- i=1*31;
- }
- }
- j=i+c; //计算天数
- printf("天数为%d\n",j); //输出天数
-
- return 0;
- }
复制代码
|
|