我从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