我有一个用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开始。
数组的边界(除非是动态数组)必须是编译时常数。
你正在使用一个变量,并且这个变量还没有被初始化。
决定x
和array
声明长度的变量不能在同一个块中。您需要使用像这样的嵌套块:
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
。