[問題] 初學者萬年曆之突發狀況_搞定

看板C_and_CPP (C/C++)作者 (小J)時間15年前 (2011/03/16 04:08), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NONE 問題(Question): 在下方我用#####################括起來的地方(在最後面) 跑DEBUG的時候雖然有經過COUT 可是卻沒有COUT出來 然後程式就莫名當掉了 看了很久還是不懂 拜託各位大哥大姊了 餵入的資料(Input): 2010年10月 預期的正確結果(Expected Output): 該年月的月曆 錯誤結果(Wrong Output): 2010 10 Sun Mon Tues Wen Thur Fri Sat 然後就什麼都沒有了程式也沒結束 程式碼(Code):(請善用置底文網頁, 記得排版) /* 問題描述:這個程式將輸出使用者所指定年月份的月曆 */ /* */ /* 輸入檔案:從標準輸入檔輸入西元年份(Year)和月份(Month) */ /* 輸出檔案:從標準輸出檔輸出所對應月份的月曆 */ /************************************************************/ //載入標準函數之原型(ptototype) #include <iostream.h> //描述自定函數之原型(prototype) int first_day(int Year, int Month); void print_calendar(int Year, int Month, int FirstDay); bool is_leap(int Year); /************************************************************/ /* 函式名稱:main */ /* 函式參數:無 */ /* 函式功能:輸入西元年份(Year)和月份(Month), */ /* 輸出所對應月份的月曆 */ /************************************************************/ int main(void) { int Year, Month, FirstDay; cout << "Year ? "; cin >> Year; cout << "Month(1-12) ?"; cin >> Month; FirstDay = first_day(Year, Month); print_calendar(Year, Month, FirstDay); return 0; } /************************************************************/ /* 函式名稱:is_leap */ /* 函式參數:西元年份(Year) */ /* 函式功能:判斷所指定年份是否為閏年, */ /* 1 for leap years; 0 for non-leap years */ /************************************************************/ bool is_leap(int Year) { bool Leap = 0; //0 for non-leap years if(Year%4000==0){ Leap=0; }else if(Year%400==0){ Leap=1; }else if(Year%100==0){ Leap=0; }else if(Year%4==0){ Leap=1; } return Leap; } /************************************************************/ /* 函式名稱:first_day */ /* 函式參數:西元年份(Year)和月份(Month) */ /* 函式功能:傳回所指定月份的第一天為星期幾(以整數表示) */ /* E.g. 0 for Sunday, 1 for Monday...... */ /************************************************************/ int first_day(int Year, int Month) { int FirstDay = 0; int Days; Days=Year*365+Year/4-Year/100+Year/400-Year/4000; FirstDay=Days%7; return FirstDay; } /************************************************************/ /* 函式名稱:print_calendar */ /* 函式參數:西元年份(Year), 月份(Month) */ /* 和該月的第一天(FirsrDay) */ /* 函式功能:輸出所指定月份的月曆 */ /************************************************************/ void print_calendar(int Year, int Month, int FirstDay) { cout<<Year<<"\t"<<Month<<"\nSun \tMon \tTues\tWen \tThur\tFri \tSat "<<endl; int MonthDay; int i=1; if(Month>=7){ Month+=1; } if(Month==2){ MonthDay=28; } if(Month%2==1){ MonthDay=31; }else{ MonthDay=30; } for(i=FirstDay;i>0;i--){ cout<<"\t "; } ############################################################################# for(i=1;i<=MonthDay;i++){ cout<<i<<"\t"; FirstDay+=1; if(FirstDay==6){ cout<<"\n"; FirstDay=0; } } ############################################################################# } 補充說明(Supplement): 關於為什麼要弄成副函式進去這個問題是因為這是教授出的作業 要我們會寫副函式 -- 人生就像線性代數, 其實都是簡單的加減乘除, 但卻複雜的讓人搞不懂。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.13.102

03/16 06:18, , 1F
有出現什麼 assert failed message 嗎?
03/16 06:18, 1F
The thread 0xC3C has exited with code 0 (0x0). The program 'C:\Documents and Settings\PC-3\桌面 \499500279_hw12\Debug\499500279_hw12.exe' has exited with code 0 (0x0). GO的時候跑出來的 ※ 編輯: jlik12385 來自: 114.32.13.102 (03/16 18:19)

03/16 22:50, , 2F
手邊只有VC2008 跑不會當 但不支援iostream.h 你是哪個版本
03/16 22:50, 2F

03/16 22:50, , 3F
first_day(int Year, int Month) Month 都沒用到
03/16 22:50, 3F
我後來發現了= = 因為我程式寫一半就跑不出結果就還沒處理這裏 我還很新手抱歉

03/16 22:51, , 4F
程式有很多邏輯問題 不過不會造成當掉吧
03/16 22:51, 4F

03/16 22:57, , 5F
那一段不會當掉 程式應該是正常結束
03/16 22:57, 5F

03/16 22:58, , 6F
不過邏輯全部都是錯的
03/16 22:58, 6F

03/16 23:00, , 7F
cout << flush; 加上幾行這個, 可能都還在緩衝區吧
03/16 23:00, 7F
正解

03/17 06:16, , 8F
code 0 表示正常結束呀
03/17 06:16, 8F
問題解決了 今天在學校問學長們 最後得到的結論是_編譯器的問題 我用的是 VC6.0 DV VC2008都跑的出來 VC6的會留在緩衝區 最後加 cout<<endl; system("pause"); 就沒事了 不過照理說 VC6應該是不用多打 暫停 的. 程式會直接結束是怎麼回事 就要高手解答了 還有我這個程式是還沒完成的寫到一半 所以結果是錯的 ※ 編輯: jlik12385 來自: 114.32.13.102 (03/18 01:28) ※ 編輯: jlik12385 來自: 114.32.13.102 (03/18 01:28) ※ 編輯: jlik12385 來自: 114.32.13.102 (03/18 01:54)
文章代碼(AID): #1DVySwYw (C_and_CPP)
文章代碼(AID): #1DVySwYw (C_and_CPP)