[問題] 邏輯漏洞??

看板C_and_CPP作者 (顧正妹)時間13年前 (2011/05/24 19:04), 編輯推噓2(2023)
留言25則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DEV C++ 問題(Question): 丟入正整數的都沒問題~問題出在我隨便亂打一些英文字~可以卻沒有跑else那一行 我如果輸入負整數最下面那一行printf也會跑~不知道問題在哪? 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int a, tax, b,c; printf("請輸入所得:"); scanf("%d",&a); if (a>=0&&a<37000) { b=6; c=0; } else if(a>=370000&&a<990000) { b=13; c=25900; } else if(a>=990000&&a<1980000) { b=21; c=105100; } else if(a>=1980000&&a<3720000) { b=30; c=283300; } else if(a>=3720000) { b=40; c=655300; } else { printf("\n\n你打錯囉"); } tax=a*b/100-c; printf("\n\n應繳納所得稅%d。累進差額%d。稅額%d",tax,c,b); system("PAUSE"); return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.207.199

05/24 19:12, , 1F
當你打英文時 scanf又不會給他東西 當然會維持初始值囉
05/24 19:12, 1F

05/24 19:16, , 2F

05/24 20:40, , 3F
原來~感謝兩位
05/24 20:40, 3F

05/24 20:42, , 4F
請問!=1那個1是甚麼意思啊?
05/24 20:42, 4F

05/24 20:48, , 5F
題外話 金年的累進稅率公式不一樣了喔
05/24 20:48, 5F

05/24 20:52, , 6F
!=1是指scanf讀的個數
05/24 20:52, 6F

05/24 20:52, , 7F
如果有讀進去的話
05/24 20:52, 7F

05/24 21:57, , 8F
http://goo.gl/J5niL 其實我整個傻眼, 這個世界上不是
05/24 21:57, 8F

05/24 21:57, , 9F
為什麼個數就可以判斷輸入的是不是正整數?
05/24 21:57, 9F

05/24 21:57, , 10F
只有int一種內建型態好嗎? 如果錢有-1塊, 你用int我也
05/24 21:57, 10F

05/24 21:59, , 11F
認了...你要搞清楚函式的回傳值跟參數要求, 才能去呼
05/24 21:59, 11F

05/24 21:59, , 12F
05/24 21:59, 12F

05/24 22:00, , 13F
人家不是資工的- -只是要基本運算而已
05/24 22:00, 13F

05/24 22:01, , 14F
這關資工什麼事?
05/24 22:01, 14F

05/24 22:02, , 15F
我只學了一個月很多東西都還搞不太懂~懇請大家指教
05/24 22:02, 15F

05/24 22:16, , 16F
你先看看上面 scanf 的說明頁面,特別是 return value
05/24 22:16, 16F

05/24 22:16, , 17F
寫一些小程式來驗證,什麼情況下會回傳什麼值
05/24 22:16, 17F

05/25 08:43, , 18F
數值運算是很基礎,但是一發生問題卻會讓你欲哭無淚的
05/25 08:43, 18F

05/25 08:43, , 19F
如果要用c/c++的話,最好細心點.無關資工
05/25 08:43, 19F

05/25 10:20, , 20F
拍謝, 少加sentinel http://goo.gl/qa9Md
05/25 10:20, 20F

05/26 00:16, , 21F
一行程式最好看成一種工具,而不要看做什麼邏輯完整的東西.
05/26 00:16, 21F

05/26 00:17, , 22F
比喻來說,一鎚子敲下去,你不可能期待這種操作中蘊含了是否
05/26 00:17, 22F

05/26 00:18, , 23F
有機會達成鑿孔的效果. 程式內容本來只思考正確的數值判斷,
05/26 00:18, 23F

05/26 00:19, , 24F
當然沒有管你輸入錯的輸入值會出現哪一種結果. 不管錯的輸入
05/26 00:19, 24F

05/26 00:20, , 25F
產生對的結果,或者錯的輸入產生錯的結果,對你都沒有意義.
05/26 00:20, 25F
文章代碼(AID): #1Dsv2XBj (C_and_CPP)