#include <stdio.h>int main() { int year = 2008; int month =1; int day = 8; int date; switch(month) { case 1:date+=0; case 2:date+=31; case 3:date+=28; case 4:date+=31; case 5:date+=30; case 6:date+=31; case 7:date+=30; case 8:date+=31; case 9:date+=31; case 10:date+=30; case 11:date+=31; case 12:date+=day; break; } if(year%400==0||(year%4==0&&year%100!=00)) date=date+1+day; else date=date+day; printf("%d年是%d月%d日是该年的第%d天 ",year,month,day,date); return 0;}我输出的时候那个日期总是错误显示-837847982478一类的
5 回答
聊发少年狂
TA贡献9条经验 获得超9个赞
switch(month){ case 1:date = 0;break; case 2:date = 31;break; case 3:date = 59;break; case 4:date = 90;break; case 5:date = 120;break; case 6:date = 151;break; case 7:date = 181;break; case 8:date = 212;break; case 9:date = 243;break; case 10:date = 273;break; case 11:date = 304;break; case 12:date = 334;break; default:break;
你date没有赋初始值,另外switch语句是分支选择执行而不是顺序执行的,所以你这样定义switch语句分支语句最后结果肯定是只有12月是对的。还有分支语句要用break跳出。
望远
TA贡献1017条经验 获得超1032个赞
#include <stdio.h> int main() { int year = 2008; int month =1; int day = 8; int date; switch(month) { //switch语句执行步骤-》匹配参数month,一旦发现匹配成功,则执行该case块的代码,执行到break语句跳出switch语句 case 1:date+=0;break;//所以如果month==1,执行case 1 ,如果后面没有break;直接往下执行,不管是否匹配,一直到执行了break或者全部执行完毕 case 2:date+=31;break; case 3:date+=28;break; case 4:date+=31;break; case 5:date+=30;break; case 6:date+=31;break; case 7:date+=30;break; case 8:date+=31;break; case 9:date+=31;break; case 10:date+=30;break; case 11:date+=31;break; default:date+=day;//这里反而是可以不用break的,当然加上也可以,最好是default } if(year%400==0||(year%4==0&&year%100!=00)) date=date+1+day; else date=date+day; printf("%d年是%d月%d日是该年的第%d天 ",year,month,day,date); return 0; }
已采纳
一叶追寻
TA贡献38条经验 获得超23个赞
我用你的代码运行出来是这样子的,你的switch语句里面只有case 12 后面才有break;这就会导致case 1到case 12 之间的语句都会执行,程序还需要设计一下
- 5 回答
- 0 关注
- 1675 浏览
添加回答
举报
0/150
提交
取消