gpt4 book ai didi

delphi - 为什么我的 "if"语句似乎没有运行?

转载 作者:行者123 更新时间:2023-12-03 15:03:43 25 4
gpt4 key购买 nike

我从 C# 转向 Delphi 2009,到目前为止我非常喜欢它。

我写了一个二分查找程序,效果很好。我在我的过程末尾添加了一个简单的 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 语句复制到一个小型测试过程中,然后调用该过程,它就会起作用,所以这让我认为这是过程中的其他内容,例如缺少 ; 导致出现奇怪的情况发生但我看不到它。请帮忙!

最佳答案

Delphi 编译器非常聪明,它会很乐意删除未使用的代码。当我编译你的代码时,我得到编译器提示“分配给‘rslt’的值从未使用过”。由于从未使用过该值,因此编译器只是跳过这些语句。

如果将 Writeln(rslt); 添加到过程末尾,您会发现调试器现在将跟踪您的 if 语句。

关于delphi - 为什么我的 "if"语句似乎没有运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1934593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com