例外處理 |
答題得分者是:WilliamWeng
|
ggg
一般會員 ![]() ![]() 發表:14 回覆:13 積分:5 註冊:2005-06-26 發送簡訊給我 |
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
WilliamWeng
一般會員 ![]() ![]() 發表:0 回覆:6 積分:6 註冊:2007-07-26 發送簡訊給我 |
===================引 用 ggg 文 章=================== 想請問一個例外處理的程式要如何寫,就是給一個edit元件讓使用者 輸入一個數值,將輸入的string轉成integer,當使用者輸入的不是一 個可以轉integer的字串時,提出警告且程式重新來一遍,試了用if和 try語法但是寫不出來,我想問題應該出在判斷程式部分。 --------------------------------------------------------------------------------------------------- var TheValue, E: Integer; begin val(Edit1.Text, TheValue, E); if E <> 0 then begin Edit1.Clear; Edit1.SetFocuse; end; end; |
shunaaron
高階會員 ![]() ![]() ![]() ![]() 發表:13 回覆:94 積分:106 註冊:2006-10-06 發送簡訊給我 |
|
ggg
一般會員 ![]() ![]() 發表:14 回覆:13 積分:5 註冊:2005-06-26 發送簡訊給我 |
THANK YOU VERY MUCH.
判斷句寫出來了,但是... 測試程式: InputString:=InputBox('成績評等','請輸入成績','100'); val(InputString,Input,code); if code <>0 then begin MessageDlg('請輸入數值',mtWarning,[mbOK],0); end else Input:=StrToInt(InputString); If Input>=60 then begin ShowMessage('及格'); Label1.Caption:='及格'; end else begin ShowMessage('不及格'); Label1.Caption:='不及格'; end 請問為何第二次輸入錯誤後,還是會執行到ShowMessage('不及格');? |
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
===================引 用 ggg 文 章=================== THANK YOU VERY MUCH. 判斷句寫出來了,但是... 測試程式: InputString:=InputBox('成績評等','請輸入成績','100'); val(InputString,Input,code); if code <>0 then begin MessageDlg('請輸入數值',mtWarning,[mbOK],0); end else BEGIN Input:=StrToInt(InputString); If Input>=60 then begin ShowMessage('及格'); Label1.Caption:='及格'; end else begin ShowMessage('不及格'); Label1.Caption:='不及格'; end; END; 請問為何第二次輸入錯誤後,還是會執行到ShowMessage('不及格');? |
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
要多用結構化設計,要多用函式,如
Function IsValidCScore ( cThisScore : string ) : Boolean ; var TempI : integer ; begin try TempI := StrToInt(cThisScore) ; Result := True ; except Result := False ; end ; end ; 你原先的寫法是不好的 InputString:=InputBox('成績評等','請輸入成績','100'); val(InputString,Input,code); if code <>0.... 理由是: 1.你不該用val,這是很不適合這的東東。第一,它無法篩除不合法﹝如abc﹞或不在合理 區間的值﹝如120分﹞。第二,它無法給你完全掌控的能力。第三,你的程式碼會變的 很複雜,你的思考會變得要考慮很多事情。這與寫程式的簡化的原則,有違背 2.沒有結構化思考,不可能吃電腦這行飯的。別人三下兩下可以作好的,你會硬是要弄 到世界末日的
------
Kevin
編輯記錄
kevin2004 重新編輯於 2008-05-07 17:36:09, 註解 無‧
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
ggg
一般會員 ![]() ![]() 發表:14 回覆:13 積分:5 註冊:2005-06-26 發送簡訊給我 |
===================引 用 kevin2004 文 章=================== 小弟純聊天。 不要一下問Edit,一下又試InputBox,兩者用的地方不一樣。後者用的地方較少。 Delphi曾是RAD工具的翹楚,現在還是很好用。要想很快能上手,記得掌握幾個訣竅: 1.能用Delphi已現成的功能,就不必自己寫。你寫不過Delphi的 2.先選對元件,很多元件已是千鎚百煉才設計出來的,選錯了,事倍功半 3.再選對事件,填入最少及必須的碼就好了。 ======================================================================== 多謝各位大大的指教和指點,我是突然想玩一下DELPHI,以前有稍微看過一點書, 現在都不記得了,這題得分還是給最先回答者 WilliamWeng 。 kevin2004 大大說的真對,我也是這麼認為,如果可以的話我也想要像你說的這樣做, 無奈自己功力還沒到那邊,現在只能從錯誤中成長了,總之多謝各位了。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |