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

請問case...of...的選項列式問題

尚未結案
adie
一般會員


發表:2
回覆:3
積分:1
註冊:2004-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-26 02:26:41 IP:203.204.xxx.xxx 未訂閱
請問一下在case...of..中的選項列式可是單一值也可以是一個區間, 如1..10。那這二個區間值是未知數時,可以用其他方法來表示嗎? 我有試過用變數是不行。
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-26 08:03:41 IP:210.65.xxx.xxx 未訂閱
Hi adie,
Case 中只接受 Const 因此必須更改如下:
procedure TForm1.Button1Click(Sender: TObject);
const
  min = 0;
  max = 100;
var
  v : integer;
  s : string;
begin
  v := SpinEdit1.value;
  case v of
    min..max : s :='OK';
  else
    s := 'NG';
  end;
  ShowMessage(s);
end;    若  Minimum 與 Maximum 必須一定是變數,可以考慮使用以下寫法:
procedure TForm1.Button2Click(Sender: TObject);
var
  v,min,max : integer;
  s : string;
begin
  v := SpinEdit1.value;
  min := 0;
  max := 100;
  if v in  [min..max] then
    s := 'OK'
  else
    s := 'NG';
  ShowMessage(s);
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
adie
一般會員


發表:2
回覆:3
積分:1
註冊:2004-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-26 11:25:47 IP:220.135.xxx.xxx 未訂閱
Hi,Fishman 感謝你熱心的回答 第一種作法: 我之前有試過用常數const定義是可以在case中為作判斷,但因const的數字,是由資料庫中讀取出來的,所以在定義const之前,也是不知道數值是多少的。 第二種作法: 目前也只能用if來作判斷條件,但是在 begin   v := SpinEdit1.value;   min := 0;   max := 100;   if v in  [min..max] then<-------max最大只能到255     s := 'OK'   else     s := 'NG';   ShowMessage(s); 有方法可以增大最大值的數值嗎?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-26 12:28:31 IP:210.65.xxx.xxx 未訂閱
Hi adie,    你的 min & max 是否定義為 Byte?將它定義為其他型態即可!
Type     Range                   Format
-------- ----------------------- ---------------
Shortint -128..127               signed 8-bit
Smallint -32768..32767           signed 16-bit
Longint  -2147483648..2147483647 signed 32-bit
Int64    -2^63..2^63-1           signed 64-bit
Byte     0..255                  unsigned 8-bit
Word     0..65535                unsigned 16-bit
Longword 0..4294967295           unsigned 32-bit
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
adie
一般會員


發表:2
回覆:3
積分:1
註冊:2004-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-26 17:00:18 IP:220.135.xxx.xxx 未訂閱
hi,Fishman 我的min,max : integer; 都是設integer,範圍是-2147483648~2147483647,儲存格式是signed 32-bit。 所以應該是夠大。 後來我直接在[mix..max]填入數值[0..300]他就顯示錯誤的訊息 Constant expression violates subrange bounds 好像是超出他子範圍的規則了,他的範圍我測是在[0..255]是都可的。 我查help是The base type can have no more than 256 possible values, and their ordinalities must fall between 0 and 255.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-26 18:47:55 IP:210.65.xxx.xxx 未訂閱
Hi adie,    奇怪,我用 D7 測試是 OK 的。    可否提供程式碼,請大家幫忙看看?     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
adie
一般會員


發表:2
回覆:3
積分:1
註冊:2004-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-26 22:47:35 IP:203.204.xxx.xxx 未訂閱
hi,fishman 再次感謝你的回答,以下這是我的程式碼 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin; type TForm1 = class(TForm) Button1: TButton; SpinEdit1: TSpinEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var v,min,max : integer; s : string; begin v := SpinEdit1.value; min := 0; max := 300; if v in [min..max] then s := 'OK' else s := 'NG'; ShowMessage(s); end; end. 我輸入255,showmessage(s)應該是出現ok才對,因為在0..300之間,但是他s是輸出NG.
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-26 23:16:20 IP:61.219.xxx.xxx 未訂閱
http://info.borland.com/techpubs/delphi/delphi5/oplg/datatype.html Delphi 5 的確是 0..255 既然是範圍是 "變數" 用兩個 if 應該不會比 if in [min..max] 慢吧? 似乎也比較合理..... 何必拘泥在形式上呢?
way888
初階會員


發表:32
回覆:76
積分:36
註冊:2005-05-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-27 10:35:12 IP:220.136.xxx.xxx 未訂閱
試試將 if v in [min..max] then 改成如下 if (v>=min)and(v<=max) then
系統時間:2024-11-25 14:34:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!