我还是初学者,所以请原谅我,如果这是一个愚蠢的错误或其他什么。 我想编写一个程序来生成从2到n的素数,而n是用户定义的。由于我在程序开始时不知道n,因此我想构建一个动态数组和setlength(n)。以下是我的代码片段:
program D401;
type
arr = array of int64;
var
x : int64;
a : arr;
begin
readln(x);
setlength(a, x);
end.
但它不会起作用而且它说: 致命:语法错误,[预期但发现
我也试过这个:
program D401;
var
x : int64;
a : array of int64;
begin
readln(x);
setlength(a, x);
end.
但它也会产生同样的错误。我也使用了freepascal和GNU pascal,但它也没有用。它是开发者的问题还是没有更新或什么?
提前致谢。
答案 0 :(得分:1)
Dev Pascal很古老,并且使用不支持动态数组语法的旧编译器。简单地说,你今天不应该使用它。
如果你想要一个使用最新Pascal编译器的免费开发环境,最好的选择是Lazarus,使用现代版本的freepascal。
答案 1 :(得分:0)
这在现代世界无关紧要。但我正在为那些想要故意使用过时的 GNU Pascal 的人写我的答案。我对 GNU Pascal 略知一二,但建议采用基于指针的方法:
program dynarr;
type
TElem = integer;
TPArray = ^TElem;
var
pArray: TPArray;
length, i: INTEGER;
begin
length := 10;
GetMem(pArray, length * sizeof(TElem));
for i := 0 to length-1 do
(pArray+i)^:=i;
for i := 0 to length-1 do
writeln((pArray+i)^);
FreeMem (pArray, length * sizeof(TElem));
readln;
end.
使用 --pointer-arithmetic
选项编译