我從C#跳到Delphi 2009,我非常喜歡它。爲什麼我的「if」陳述似乎不運行?
我寫了一個二進制搜索過程,它工作正常。我在我的proc結尾添加了一個簡單的if-else語句,但它不會觸發!我看不出有什麼問題,不好意思說我被卡住了。請幫忙!
procedure BinSearch;
var
min,max,mid, x: integer;
A : array[0..4] of integer;
rslt : integer;
begin
writeln('binary search');
A[0] := 34; A[1] := 65; A[2] := 98; A[3] := 123; A[4] := 176;
listarray(a);
x := 62;
min := 0;
max := 4;
repeat
begin
mid := (min + max) div 2;
if x > A[mid] then
min := mid + 1
else
max := mid - 1;
end;
until (A[mid] = x) or (min > max);
writeln(mid);
writeln(a[mid]);
if A[mid] = x then
rslt := mid
else
rslt := not mid;
if 54 = 65 then
rslt := mid
else
rslt := not mid;
end;
這是一個不會觸發的if A[mid] = x then
。當調試真假分支時,調試器直接跳過它們。另外if 54 = 65 then
這只是一個測試也是一樣。
如果我的重複循環內,但工作正常。
如果我複製問題,如果語句轉換成一個小型測試PROC,然後調用它的工作PROC,所以這讓我覺得這是別人像一個丟失;
的進程內的東西造成一些奇怪的情況發生,但我無法看到它。請幫忙!
由於rslt從來沒有用在除賦值語句之外的任何地方,Delphi編譯器在優化過程中刪除了該塊代碼。它不會影響源代碼,只是不會將該代碼寫入目標文件。您可能得到了一個編譯器警告,rslt變量從未使用過...... – Sparky 2009-12-20 01:33:59
歡迎使用StackOverflow和Delphi。 – 2009-12-20 02:29:04
只是一個提示,你不需要在repeat-until循環中使用起始端對。 – Todd 2009-12-20 19:25:37