線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1432
推到 Plurk!
推到 Facebook!

例外處理

答題得分者是:WilliamWeng
ggg
一般會員


發表:14
回覆:13
積分:5
註冊:2005-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-05 22:56:07 IP:203.79.xxx.xxx 訂閱
想請問一個例外處理的程式要如何寫,就是給一個edit元件讓使用者

輸入一個數值,將輸入的string轉成integer,當使用者輸入的不是一

個可以轉integer的字串時,提出警告且程式重新來一遍,試了用if和

try語法但是寫不出來,我想問題應該出在判斷程式部分。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-05 23:18:16 IP:61.67.xxx.xxx 未訂閱
本站有限多相關討論
搜尋 "例外"
WilliamWeng
一般會員


發表:0
回覆:6
積分:6
註冊:2007-07-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-06 01:36:01 IP:220.135.xxx.xxx 未訂閱

===================引 用 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-07 00:05:30 IP:220.134.xxx.xxx 訂閱
try 
for ttI := 0 to 10 do begin
try
ttInt := strtoint(a);
finally
end;
end;
except E.Message do
ShowMessage(e.Message);
end;

差異~自行TRY或~找K.TOP資源
不要太懶了,
Delphi多按F1會有很多收獲
------
程式沒有這麼難
只是還沒打通其中要絕
ggg
一般會員


發表:14
回覆:13
積分:5
註冊:2005-06-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-05-07 00:23:48 IP:203.79.xxx.xxx 訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-05-07 01:24:34 IP:61.67.xxx.xxx 未訂閱

===================引 用 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-05-07 17:02:37 IP:118.161.xxx.xxx 訂閱
小弟純聊天。
不要一下問Edit,一下又試InputBox,兩者用的地方不一樣。後者用的地方較少。
Delphi曾是RAD工具的翹楚,現在還是很好用。要想很快能上手,記得掌握幾個訣竅:
1.能用Delphi已現成的功能,就不必自己寫。你寫不過Delphi的
2.先選對元件,很多元件已是千鎚百煉才設計出來的,選錯了,事倍功半
3.再選對事件,填入最少及必須的碼就好了。

------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-05-07 17:25:25 IP:118.161.xxx.xxx 訂閱
要多用結構化設計,要多用函式,如
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-05-07 17:28:25 IP:118.161.xxx.xxx 訂閱
為何不單用MaskEdit或用Edit及Edit1.OnChange搭配個try-except,多簡單
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-05-07 17:33:51 IP:118.161.xxx.xxx 訂閱
真要吃這行飯,小弟建議你,要多問一些抽象的問題,及多看別人的程式碼
有時,回想自己當年是如何苦過來的,就對新進的同好,十分同情。
多看書,祝好運了。
------
Kevin
ggg
一般會員


發表:14
回覆:13
積分:5
註冊:2005-06-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-05-07 17:51:58 IP:203.79.xxx.xxx 訂閱

===================引 用 kevin2004 文 章===================
小弟純聊天。
不要一下問Edit,一下又試InputBox,兩者用的地方不一樣。後者用的地方較少。
Delphi曾是RAD工具的翹楚,現在還是很好用。要想很快能上手,記得掌握幾個訣竅:
1.能用Delphi已現成的功能,就不必自己寫。你寫不過Delphi的
2.先選對元件,很多元件已是千鎚百煉才設計出來的,選錯了,事倍功半
3.再選對事件,填入最少及必須的碼就好了。
========================================================================


多謝各位大大的指教和指點,我是突然想玩一下DELPHI,以前有稍微看過一點書,

現在都不記得了,這題得分還是給最先回答者
WilliamWeng

kevin2004 大大說的真對,我也是這麼認為,如果可以的話我也想要像你說的這樣做,

無奈自己功力還沒到那邊,現在只能從錯誤中成長了,總之多謝各位了。


系統時間:2024-04-19 8:56:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!