gpt4 book ai didi

delphi - 如何找到我的错误(delphi)

转载 作者:行者123 更新时间:2023-12-02 11:11:55 25 4
gpt4 key购买 nike

我收到 I/o 998 错误,我的任务是将数字从文件重写为数组,并查找最大值和最小值。我做错了什么?

implementation

var
f2: file of Real;
m: array of Real;

procedure TForm1.Button1Click(Sender: TObject);
var
f: Real;
max, min: Real;
i, j: Integer;
begin
AssignFile(F2, 'test3.dat');
Rewrite(f2);

for i := 1 to 50 do
begin
f := RandomRange(-100, 100);
Randomize;
Write(f2, f);
end;

CloseFile(f2);

i := 0;

Reset(f2);

while not Eof(f2) do
begin
SetLength(m, i);
Read(f2, m[i]);
Inc(i);
end;

CloseFile(f2);

max := m[1];
min := m[1];

for j := 1 to i do
if m[j] > max then
max := m[j]
else
if m[j] < min then
min := m[i];

最佳答案

错误较多,请参阅代码中的注释。

  • Randomize 应在程序启动时调用一次。
  • 动态数组的起始索引为 0。
  • CloseFile 释放文件句柄
  • 在循环之前定义动态数组的长度,否则会出现 I/O 错误。
  • High(m) 将获取动态数组的最大索引。
  • 分配最小值的索引变量是 j。
<小时/>
implementation

var
f2: file of Real;
m: array of Real;

procedure TForm1.Button1Click(Sender: TObject);
var
f: Real;
max, min: Real;
i, j: Integer;
begin
AssignFile(F2, 'test3.dat');
Rewrite(f2);

for i := 1 to 50 do
begin
f := RandomRange(-100, 100);
//Randomize; <-- Call this once at program start
Write(f2, f);
end;

//CloseFile(f2); <-- Don't close yet.

Reset(f2);
SetLength(m, 50); // <-- Define length of dynamic array
i := 0;
while not Eof(f2) do
begin
// SetLength(m, i); // <-- Moved to before while loop, or use SetLength(m,i+1);
Read(f2, m[i]);
Inc(i);
end;

CloseFile(f2);

max := m[0]; // <-- Dynamic arrays start with index 0
min := m[0]; // <-- Dynamic arrays start with index 0

for j := 1 to High(m) do // <- Max index
if m[j] > max then
max := m[j]
else
if m[j] < min then
min := m[j]; // <-- j is correct index variable

关于delphi - 如何找到我的错误(delphi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664881/

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