[問題] 輸入5個浮點數,找出最大值

看板C_and_CPP (C/C++)作者 (NMOSFET)時間11年前 (2015/04/22 17:55), 11年前編輯推噓8(8021)
留言29則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 輸入5個浮點數找出最大質 程式碼(Code): #include<stdio.h> double maximum(double a, double b, double c, double d, double e); int main(void) { double number1 = 0; double number2 = 0; double number3 = 0; double number4 = 0; double number5 = 0; printf("%s", "請輸入五個小數: \n"); scanf("%1f %1f %1f %1f %1f", &number1, &number2, &number3, &number4,&number5); printf("最大值為:%1f\n", maximum(number1, number2, number3, number4,number5)); system("pause"); return 0; } double maximum(double a, double b, double c, double d, double e) { double max = a; if (b>max) { max = b; } if (c>max) { max = c; } if (d>max) { max = d; } if (e>max) { max = e; } return max; } 補充說明(Supplement): 1.我輸入整數時沒問題,輸入小數只讓我輸入一次 2.不管輸入多少(整數)都無法比較,只會輸出0.000000 但是把全部double型態改成float型態卻能正常比較(整數) 且輸出正確值 3. http://pastebin.com/A9W72kas 這是課本的答案 把小於改大於就是我要的答案(求最大值),輸入小數 也沒問題,可是我看不出它的程式和我打的差在哪裡 懇求哪位大大肯幫我解惑 ORZ.... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.18.29.27 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429696557.A.09A.html ※ 編輯: NMOSFET (163.18.29.27), 04/22/2015 18:00:54

04/22 18:15, , 1F
%lf 是小寫 L 不是數字 1
04/22 18:15, 1F

04/22 18:16, , 2F
(是說課本裡沒對這點強調過嗎...?)
04/22 18:16, 2F

04/22 18:17, , 3F
%1f 會被認成輸入 %f 即 float 浮點數, 所以才會有你的2.
04/22 18:17, 3F

04/22 18:18, , 4F
那個 1 會被解釋為最多一個字, 所以你會發現即使改成 float
04/22 18:18, 4F

04/22 18:18, , 5F
你輸入的東西都只有一位數
04/22 18:18, 5F

04/22 18:19, , 6F
也由於最多一個字所以碰到 '.' 字 scanf 就不知道怎麼辦了
04/22 18:19, 6F

04/22 18:21, , 7F
才會只讓你輸入一次; 而 %f 跟 double 對不上所以讀進的值
04/22 18:21, 7F

04/22 18:21, , 8F
是錯亂的, 這就解釋了你的 1.
04/22 18:21, 8F

04/22 18:22, , 9F
(所以我個人覺得教 scanf 時一定要強調那是 L 不是 1 ...)
04/22 18:22, 9F

04/22 18:29, , 10F
這種打字機時代的錯誤居然30年後還沒根除 X(
04/22 18:29, 10F
感謝L大大,到剛剛為止我都一直以為float和double都是用%f顯示,難怪之前寫的程式 用到double都會怪怪的,當初看答案1f想說是不是預留空間,沒想到是L 囧~~ ※ 編輯: NMOSFET (163.18.29.27), 04/22/2015 22:01:30

04/22 23:44, , 11F
printf 的時候兩者沒差, 但 scanf 時就有差了
04/22 23:44, 11F

04/22 23:44, , 12F
所以為了簡單好記起見對應著用保證 OK
04/22 23:44, 12F

04/22 23:47, , 13F
這一切都是字型的錯~
04/22 23:47, 13F

04/23 01:28, , 14F
早期需要輸入CD上認證碼的遊戲,我也常常搞混O和L
04/23 01:28, 14F

04/23 08:21, , 15F
讓我想到以前瘋找 c1.exe 的事…
04/23 08:21, 15F

04/23 09:45, , 16F
小時候看dbase的書,他是寫給30年前只用過打字機的人看
04/23 09:45, 16F

04/23 09:45, , 17F
的,第一章就講「我知道很多人打字習慣用小寫l代替1,
04/23 09:45, 17F

04/23 09:46, , 18F
甚至小寫o代替0,不要這樣…」結果現在還是不時發生
04/23 09:46, 18F

04/23 20:09, , 19F
像我用 Consolas 字型就沒這問題,0 中間會有一斜撇
04/23 20:09, 19F

04/23 20:10, , 20F
1 跟 l 長的也很不一樣 XD 建議可以換一個好一點的字體
04/23 20:10, 20F

04/23 20:13, , 21F
詳見 Top 10 programming fonts http://goo.gl/IbKZtb
04/23 20:13, 21F

04/23 20:46, , 22F
怒噓,Monaco 只第六?
04/23 20:46, 22F

04/23 20:46, , 23F
是第八QQ
04/23 20:46, 23F

04/23 23:23, , 24F
以前也愛 Monaco, 但現在覺得不如用 Menlo 和 Consolas
04/23 23:23, 24F

04/23 23:23, , 25F
網頁上說得很中肯, Monaco 在字小(尤其沒有反鋸齒)的
04/23 23:23, 25F

04/23 23:24, , 26F
時候很讚, 但放大之後在現在的高解析度螢幕就不太行
04/23 23:24, 26F

04/23 23:56, , 27F
嗯嗯謝謝你的分享。 我就是喜歡 Monaco 的小寫a啊~
04/23 23:56, 27F

04/23 23:56, , 28F
螢幕......目前只有筆電螢幕QQ
04/23 23:56, 28F

04/24 00:22, , 29F
Monaco也太古意了一點(不過誰古得過pica阿)
04/24 00:22, 29F
文章代碼(AID): #1LDt0j2Q (C_and_CPP)
文章代碼(AID): #1LDt0j2Q (C_and_CPP)