關(guān)于月份順序問題
#include <stdio.h>
int main()?
{?
? ? /* 定義需要計(jì)算的日期 */
? ? 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()?
{?
? ? /* 定義需要計(jì)算的日期 */
? ? 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;
}
這是程序基本相同的代碼,不同的就是一個(gè)月份是從大到小,另一個(gè)是從小到大,我想問問為啥結(jié)果不一樣?
2017-03-29
switch語句會先找到case的數(shù)字然后往下運(yùn)行,第一個(gè)只計(jì)算了case7,第二個(gè)從case7計(jì)算到case一。。
2017-03-29
#include <stdio.h>
int main()?
{?
? ? /* 定義需要計(jì)算的日期 */
? ? 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;
}
你把每一個(gè)case 后面加個(gè)break;就行了,第一個(gè)是因?yàn)?月份的時(shí)候,輸入switch的時(shí)候輸出就是case7的那個(gè)情況,然后接著執(zhí)行了break;這一結(jié)束語句,第二個(gè)代碼,因?yàn)槟惆裞ase倒過來寫,那么case7情況運(yùn)行完之后沒有結(jié)束語句break;,那么就表明沒有執(zhí)行結(jié)束,不會跳出switch,而是緊接著執(zhí)行case6;case5;……直到遇到結(jié)束語句break;才結(jié)束switch