看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
diabloevagto:http://nopaste.info/5cd8e144f6.html try it! 04/04 01:10
TsinTa:原來有"..."這招喔@@" 04/04 01:29
uranusjr:我記得 ... 是 GCC 的 extension, 不是標準 04/04 01:30
TsinTa:原來如此... 04/04 01:42
aecho:咦?一樓的做法真有趣。linux或是mac有支援這extension嗎? 04/04 10:55
xatier:4.21 Case Ranges You can specify a range of consecutive 04/04 12:57
xatier: values in a single case label, like this: 04/04 12:57
xatier:case low ... high: 04/04 12:58