使用用户输入变量确定记录数组中的记录数



我有一个用Pascal编写的代码。记录类型是recordPembeli,记录类型是array[1..x] of recordPembeli。该数组中的x将是用户在程序readln(x)体中确定的数据的长度。

程序如下:

program iniSesiDua;
uses crt;
type
recordPembeli = record
nama : string[5];
jumlahPembelian : integer;
end;
var
x : integer
dataPembelian : array[1..x] of recordPembeli;
begin
clrscr;
write('Masukkan jumlah pembeli : ');readln(x);
readln;
end.

我试了试,结果显示:

警告:变量"x"未初始化

错误:Can't evaluate constant expression

我甚至可以确定数据的长度由用户输入的记录数组或它是被禁止的?

我甚至可以通过用户输入记录数组来确定数据的长度…?

可以,但是数组必须是dynamic,这意味着元素的数量不是在编译时定义的,而是在运行时定义的:

var
x: integer;
dataPembelian: array of recordPembeli; // dynamic array, no size

begin
write('Masukkan jumlah pembeli : ');readln(x); // Get length from user
SetLength(dataPembelian, x);                   // create the records in the array

注意数组元素的索引从0开始。

数组的边界(除非是动态数组)必须是编译时常数。

你正在使用一个变量,并且这个变量还没有被初始化。

决定xarray声明长度的变量不能在同一个块中。您需要使用像这样的嵌套块:

program iniSesiDua(input, output);
type
recordPembeli = record
nama: string(5);
jumlahPembelian: integer;
end;

var
x: integer;

procedure readAndProcessPembelin;
var
dataPembelian: array[1..x] of recordPembeli;
begin
{ You read and process data here. }
end;

{ === MAIN =============================================== }
begin
write('Masukkan jumlah pembeli : ');
readLn(x);
readAndProcessPembelin
end.

非常数子范围边界是ISO标准10206 " Extended Pascal "的扩展.你的错误信息似乎是由FPC(自由Pascal编译器)发出的。这个处理器还不支持扩展Pascal。在这种情况下,你不得不使用另一种数据类型,e。 g。一个链表或者更方便的"动态"array

最新更新