大佬幫我看看我哪里出錯了,輸出總是98天,找了好久了
#include <stdio.h>
int main()?
{?
? ? /* 定義需要計算的日期 */
? ? int year = 2008;
? ? int month = 8;
? ? int day = 8;
? ? int date=0, sum=0;
? ? /*
? ? ?* 請使用switch語句,if...else語句完成本題
? ? ?* 如有想看小編思路的,可以點擊左側任務中的“不會了怎么辦”
? ? ?* 小編還是希望大家獨立完成哦~
? ? ?*/
? ? ? ? switch(month-1)
? ? ? ? {
? ? ? ? ? ? case 1:
? ? ? ? ? ? case 3:
? ? ? ? ? ? case 5:
? ? ? ? ? ? case 7:
? ? ? ? ? ? case 8:
? ? ? ? ? ? case 10:
? ? ? ? ? ? date+=31;
? ? ? ? ? ? case 2:
? ? ? ? ? ? if (year%400==0||(year%4==0 && year%100!=0))
? ? ? ? ? ? {
? ? ? ? ? ? ? ?date+=29;
? ? ? ? ? ? }
? ? ? ? ? ? else?
? ? ? ? ? ? {
? ? ? ? ? ? ? ? date+=28;
? ? ? ? ? ? };
? ? ? ? ? ? case 4:
? ? ? ? ? ? case 6:
? ? ? ? ? ? case 9:
? ? ? ? ? ? case 11:
? ? ? ? ? ? date+=30;
? ? ? ? }
?
? ? date+=day;
? ? printf("2008年8月8日,是該年中的第%d天",date);
? ??
return 0;
}
2019-02-22
switch執(zhí)行case時是直接查找7沒錯,但你7沒break;之后它就會順序執(zhí)行直到遇到一個break(這個自己做實驗跑一跑代碼就能發(fā)現(xiàn))。你以為你的代碼是說12578⑩臘(掉了臘)都加31,但其實除了10月其他都沒加,。然后你也沒出循環(huán),31+29+30+8=98.? 答案是221. switch是選擇語句,選出一個就break最好
2019-02-21
首先,month-1=7,這一點沒問題吧
按樓主的code,由于沒有break,所以從case7開始,直到最后
樓主定義的date是0,就從0算起
第一段有效代碼是case 10: date+=31;? 此時date=31??
//我知道樓主你意思是從第一個月加起,但事實上switch做的是選擇,不是順序計算
第二段有效代碼是case 2:? year定義為2008
if (year%400==0||(year%4==0 && year%100!=0))
//先做判斷,2008%400=8,8不等于0,看或后面的內容,很顯然2008滿足后面的內容
//即判斷的條件判定為真,執(zhí)行以下代碼
? ? ? ? ? ? ? ?date+=29;?? 此時date=60
else 不執(zhí)行,跳過
第三段有效代碼是case 11:date+=30; 此時date=90
第四段有效代碼是
date+=day;
? ? printf("2008年8月8日,是該年中的第%d天",date);
此時date=date+day,即得date=98
從而輸出date,即2008年8月8日,是該年中的第98天
我的分析說完了,樓樓慢慢看
2019-02-21
不是輸出97 ?