Re: [問題] switch問題

看板C_and_CPP作者 (十三)時間14年前 (2011/04/03 21:20), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《peterkot (偉仔)》之銘言: : 問題(Question): : switch的使用 : 預期的正確結果(Expected Output): : 在輸入的範圍內應得到下列結果: : n<5.0 : no damage : 5.0<=n<5.5 :some damage : 5.5<=n<6.5 : heavy damage : 6.5<=n<7.5 : disaster : 7.5<n heavy : disaster : 補充說明(Supplement): : 小弟是初學者,這是書上指定說能用switch最好(東華出版的C語言詳論), : 有和同學討論說覺得應該用if比較好做,但怕老師說沒有照書上要求被打回票, : 所以到板上來向板友請教,請板友不吝指教,有任何需要新增或改法均請板有賜教。 個人認為這題使用 switch 不會比較好,而且寫程式不是為用而用就比較高明。 你看完以下三個重點就知道為什麼 switch 不好做。 1.輸入是整數或浮點數。 2.浮點數的精準位數是多少。 3.整數或浮點數的判斷。 我假設: 1.浮點數。 2.小數點以下一位。 3.整數判斷。 基於假設 3 點,用 if 會比較適當。 double d; std::cin >> d; int i = (int)(d * 10); if(i < 50) { // no damage } else if(i < 55) { // some damage } else if(i < 65) { // heavy damage } else if(i < 75) { // disaster } else { // heavy disaster } 浮點數判斷兩者相等不太適合使用邏輯等於符號,一點點誤差都不能容許。 一般還是以絕對值小於一個很小的數來處理。 if(fabs(d - 5.5) < 1e-9) 這些爬文相信都會有。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.118.223

04/04 01:10, , 1F

04/04 01:29, , 2F
原來有"..."這招喔@@"
04/04 01:29, 2F

04/04 01:30, , 3F
我記得 ... 是 GCC 的 extension, 不是標準
04/04 01:30, 3F

04/04 01:42, , 4F
原來如此...
04/04 01:42, 4F

04/04 10:55, , 5F
咦?一樓的做法真有趣。linux或是mac有支援這extension嗎?
04/04 10:55, 5F

04/04 12:57, , 7F
4.21 Case Ranges You can specify a range of consecutive
04/04 12:57, 7F

04/04 12:57, , 8F
values in a single case label, like this:
04/04 12:57, 8F

04/04 12:58, , 9F
case low ... high:
04/04 12:58, 9F
文章代碼(AID): #1Dc7G9b- (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1Dc7G9b- (C_and_CPP)