【发布时间】:2009-12-20 00:47:25
【问题描述】:
我正在从 C# 跳槽到 Delphi 2009,到目前为止我非常喜欢它。
我写了一个二分查找程序,效果很好。我在 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 不会触发。当调试 true 或 false 分支都不会触发时,调试器会直接跳过它们。 if 54 = 65 then 也只是一个测试。
我的重复循环中的 if 工作正常。
如果我将问题 if 语句复制到一个迷你测试过程中,然后调用它工作的过程,所以它让我认为它是过程中的其他东西,比如缺少 ; 导致一些奇怪的事情发生但我看不到它。请帮忙!
【问题讨论】:
-
由于 rslt 除了赋值语句之外从未在任何地方使用过,Delphi 编译器将删除该代码块作为优化的一部分。它不会影响源代码,只是不会将该代码写入目标文件。你可能会收到一个编译器警告说 rslt 变量永远不会被使用...
-
欢迎来到 StackOverflow 和 Delphi。
-
只是提示,您不需要在重复循环中使用开始-结束对。