Tôi đang đào thoát từ C# sang Delphi 2009, tôi rất thích nó cho đến nay.Tại sao câu lệnh "if" của tôi xuất hiện không chạy?
Tôi đã viết một quy trình tìm kiếm nhị phân, hoạt động tốt. Tôi đã thêm một tuyên bố if-else đơn giản vào cuối proc của tôi và nó không cháy! Tôi không thể nhìn thấy bất cứ điều gì sai trái với nó và xấu hổ khi phải nói rằng tôi bị mắc kẹt. Hãy giúp tôi!
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;
Đó là số if A[mid] = x then
sẽ không kích hoạt. khi gỡ lỗi không đúng hoặc nhánh giả cháy, trình gỡ lỗi chỉ bỏ qua ngay trên chúng. Ngoài ra, if 54 = 65 then
chỉ là một thử nghiệm cũng vậy.
Nếu bên trong vòng lặp lặp lại của tôi hoạt động tốt.
Nếu tôi sao chép vấn đề nếu tuyên bố vào một proc thử nghiệm nhỏ, và sau đó gọi proc nó hoạt động, do đó, nó làm cho tôi nghĩ rằng nó là cái gì khác trong proc như một thiếu ;
gây ra một cái gì đó kỳ lạ xảy ra nhưng tôi không thể nhìn thấy nó . Hãy giúp tôi!
Vì rslt không bao giờ được sử dụng ở bất kỳ đâu ngoài câu lệnh gán, trình biên dịch Delphi loại bỏ đoạn mã đó như một phần của tối ưu hóa. Nó không ảnh hưởng đến mã nguồn, chỉ đơn giản là không viết mã đó vào tệp đối tượng. Bạn có thể có một cảnh báo trình biên dịch rằng biến rslt không bao giờ được sử dụng ... – Sparky
Chào mừng bạn đến với StackOverflow và Delphi. –
Chỉ cần một mẹo, bạn không cần một cặp bắt đầu trong một vòng lặp lặp lại cho đến khi. – Todd