[問題] while和switch的結合出了問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2010
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
iostream
問題(Question):
我是一名自學C++沒多久的新手
最近進度看到了函式多載(function overloading)和樣板(template)
後面有一題練習題,題目如下:
目前輸入不正確的字元到計算器裡,則它會印出錯誤訊息,但不會印出錯誤發生在哪一行
。請撰寫一個回報錯誤的程式,能印出輸入字串,並使用^記號指出錯誤
例如:12 + 4,2*3
^
P.S.計算器是參考書裡給的範例程式,這裡不重要
題目沒有要求說還要讓這個程式要附加計算功能,因此我就想偷吃步
只要讓程式的功能能判斷輸入的算式裡一些基本規則有無錯誤,並印出來就好了
下面是我對這個程式訂出來的檢查規則及理想的程式進行方式:
0.創一個陣列 equation[],將輸入的算式存進去
1.先吃掉空白後再做錯誤判斷
2.創另一個陣列 error[]來標記錯誤位置
3.輸入的算式,允許的符號為:"+ - * / . ( )",其中"+ - * /"為運算子。有其他符號
則為錯誤,並將位置存到 error[]中並存入"^"
4.小數規則:當遇到"."時,在遇到下一個運算子(+ - * /)之前,數字都視為小數,遇
到其他符號則為錯誤,並將位置存到 error[]中並存入"^"
5.當"/"和其他運算子之間數字只有"0"時,視為錯誤,並將位置存到 error[]中並存入"^"
6.印出 equation[]
7.印出 error[]
對於這些條件判斷,原本我很開心的想用if判斷式去很白話的全部打出來
但在看到亂碼之後就知道得用switch迴圈去做了._.
我用了四個函式+main來做這個程式
void eatspace(equation) 是吃掉算式間的空白
void checkSymbol(equation, error) 是檢查並標出非法的符號
void checkDecimal(equation, error) 是檢查非法的小數
void checkDivision(equation, error) 是檢查非法的除數
eatspace 運作的很順利,但 checkSymbol和 checkDecimal都只能跑出前半部分而已
checkDivision 更是連跑都跑不了......
這個程式裡,大多都是用 while迴圈裡疊 switch判斷式來檢查,因此我想問題可能在這邊
但我debug了半個晚上加一個早上,能改的都改了就是找不到問題所在......
(大概可以體會到為什麼寫程式的人最討厭debug了._.)
希望板友們能幫我看一下我的程式,找出問題到底在哪裡
感激不盡 m(_ _)m
餵入的資料(Input):
測試 checkSymbol:,,,,,4,,,,,
測試 checkDecimal:+.4.5
測試 checkDivision:2/0
預期的正確結果(Expected Output):
測試 checkSymbol:,,,,,4,,,,,
^^^^^ ^^^^^
測試 checkDecimal:+.4.5
^ ^
測試 checkDivision:2/0
^
錯誤結果(Wrong Output):
測試 checkSymbol:,,,,,4,,,,,
^^^^^
測試 checkDecimal:+.4.5
^
測試 checkDivision:程式卡住,什麼都跑不出來
程式碼(Code):(請善用置底文網頁, 記得排版)
http://codepad.org/tfdwIH5U
補充說明(Supplement):
被註解的code是一開始直接用白話寫出來的code
--
→
10/26 12:33,
10/26 12:33
→
10/26 12:34,
10/26 12:34
→
10/26 12:35,
10/26 12:35
推
10/26 12:37,
10/26 12:37
→
10/26 12:39,
10/26 12:39
→
10/26 12:43,
10/26 12:43
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.234.241
→
01/29 11:39, , 1F
01/29 11:39, 1F
但什麼都不加的話,這樣就會出現亂碼......0.0
→
01/29 14:17, , 2F
01/29 14:17, 2F
→
01/29 14:18, , 3F
01/29 14:18, 3F
→
01/29 14:20, , 4F
01/29 14:20, 4F
→
01/29 14:21, , 5F
01/29 14:21, 5F
瞭解了
那請問我error[]該給他什麼初始值比較好0.0?
如果都不給的話就會出現亂碼,但不管給什麼初始值都只會印出前面而已......
※ 編輯: o07608 來自: 114.39.234.241 (01/29 14:26)
剛剛不爽,初始值直接給"hello world!"
結果輸出值變成,,,,,4,,,,, 了......OAO
^^^^^ ^^^^^!
難道我要給他「79個空白」這種初始值嗎......囧a
→
01/29 14:34, , 6F
01/29 14:34, 6F
所以真的要用這個初始值喔,囧
※ 編輯: o07608 來自: 114.39.234.241 (01/29 14:36)
總算解決前兩個函式了,剩下第三個......
→
01/29 15:56, , 7F
01/29 15:56, 7F
→
01/29 15:56, , 8F
01/29 15:56, 8F
→
01/29 16:24, , 9F
01/29 16:24, 9F
→
01/29 16:25, , 10F
01/29 16:25, 10F
我想說那些變數只是拿來指陣列位置就隨便設......
剛才在最後面加了一個i++。總算是解決無窮迴圈問題了
然後錯誤符號印不出來OAQ
→
02/02 01:22, , 11F
02/02 01:22, 11F
原來提問也有這種方法......
※ 編輯: o07608 來自: 114.27.4.77 (02/02 22:18)