Gulliver_c
2017-03-29 14:38
#include <stdio.h>
int main()
{
/* 定义需要计算的日期 */
int year = 2008;
int month = 8;
int day = 8;
int sum=0;
switch(month-=1){
case 1:sum+=31;
case 2:if(year%4)sum+=28;else sum+=29;
case 3:sum+=31;
case 4:sum+=30;
case 5:sum+=31;
case 6:sum+=30;
case 7:sum+=31;
break;
}
sum+=day;
printf("2014年08月08日是该年的第%d天\n",sum);
//
#include <stdio.h>
int main()
{
/* 定义需要计算的日期 */
int year = 2008;
int month = 8;
int day = 8;
int sum=0;
switch(month-=1){
case 7:sum+=31;
case 6:sum+=30;
case 5:sum+=31;
case 4:sum+=30;
case 3:sum+=31;
case 2:if(year%4)sum+=28;else sum+=29;
case 1:sum+=31;
break;
}
sum+=day;
printf("2014年08月08日是该年的第%d天\n",sum);
return 0;
}
这是程序基本相同的代码,不同的就是一个月份是从大到小,另一个是从小到大,我想问问为啥结果不一样?
switch语句会先找到case的数字然后往下运行,第一个只计算了case7,第二个从case7计算到case一。。
#include <stdio.h>
int main()
{
/* 定义需要计算的日期 */
int year = 2008;
int month = 8;
int day = 8;
int sum=0;
switch(month-=1){
case 7:sum+=31;break;
case 6:sum+=30;break;
case 5:sum+=31;break;
case 4:sum+=30;break;
case 3:sum+=31;break;
case 2:if(year%4)sum+=28;else sum+=29;break;
case 1:sum+=31;break;
break;
}
sum+=day;
printf("2014年08月08日是该年的第%d天\n",sum);
return 0;
}
你把每一个case 后面加个break;就行了,第一个是因为8月份的时候,输入switch的时候输出就是case7的那个情况,然后接着执行了break;这一结束语句,第二个代码,因为你把case倒过来写,那么case7情况运行完之后没有结束语句break;,那么就表明没有执行结束,不会跳出switch,而是紧接着执行case6;case5;……直到遇到结束语句break;才结束switch
C语言入门
926206 学习 · 20797 问题
相似问题