C语言编程显示某年某月某日是该年的第几天

#include<stdio.h>
void main()
{int y,m,d,r,feb,year;
printf("请按“yyyy-mm-dd”输入日期\n");
scanf("%d-%d-%d",&y,&m,&d);
r=d;
if(m<1|| m>12)
{printf("月份错误\n");
return;
}
year=y>0?1:0;
switch(year){
case 0:printf("年份错误");return;
case 1:if (year%400==0||year%4==0&&year%100!=0)
feb=29;
else feb=28;
}
if(d>31||(m==4||m==6||m==9||m==11)&&d>30||(m==2)&&m>feb)
{printf("日期错误");
return;
}
switch (m-1){
case 11: r+=30;
case 10: r+=31;
case 9: r+=30;
case 8: r+=31;
case 7: r+=31;
case 6: r+=30;
case 5: r+=31;
case 4: r+=30;
case 3: r+=31;
case 2: r+=feb;
case 1: r+=31;
default: r=d;
printf("%d年%d月%d日是%d年第%d天",&y,&m,&d,&y,&r);
}
}
求问这段代码到底错误在哪里?为什么最后显示出来的年月日是很大的数字

你这里的switch语句有问题,从头到尾case没加break,相当于每次都是从判断的那个地方顺序往下全加了一遍,你可以再看一下switch的用法
switch (m-1){
case 11: r+=30;break;
case 10: r+=31;break;
case 9: r+=30;break;
case 8: r+=31;break;
case 7: r+=31;break
case 6: r+=30;break;
case 5: r+=31;break;
case 4: r+=30;break;
case 3: r+=31;break;
case 2: r+=feb;break;
case 1: r+=31;break;
default: r=d;break;}
也可以写成:switch(m-1){case 1:case 3:case 5:case 7:case 8:case 10:case 12:r+=31;break;
case 2:r+=feb;break;
case 4:case 6:case 9:case 11:r+=30;break;}这样
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-07
你case后面都没break语句
相似回答