Pascal 如何在数组中使用变量?

Pascal 如何在数组中使用变量?,pascal,freepascal,Pascal,Freepascal,我在做一门课程时使用PASCAL,我在做作业时遇到了问题,在我的程序中,我使用了两个数组,它们使用来自用户输入的变量,但当我运行程序时,它出现了一个错误:无法计算常量表达式。阵列的代码为: Var x : integer; s : array[1..x] of real; n : array[1..x] of string[30]; 这里x是用户的输入,数组是否有从1到x的方法?如果x是一个变量,那么它实际上不会工作。所谓的静态数组的范围必须是一

我在做一门课程时使用PASCAL,我在做作业时遇到了问题,在我的程序中,我使用了两个数组,它们使用来自用户输入的变量,但当我运行程序时,它出现了一个错误:无法计算常量表达式。阵列的代码为:

Var
        x : integer;
        s : array[1..x] of real;
        n : array[1..x] of string[30];

这里x是用户的输入,数组是否有从1到x的方法?

如果
x
是一个变量,那么它实际上不会工作。所谓的静态数组的范围必须是一个常量表达式,即它必须在编译时已知

所以你想要的东西不会起作用

不过,在FreePascal中,您可以使用。它们的长度可以在运行时设置和更改

var
  x: Integer;
  s: array of Real;
  n: array of string[30]; // why not just string?
后来:

  x := someUserInput(); // pseudo code!
  SetLength(s, x);
  SetLength(n, x);
您应该知道动态数组是基于
0
的,因此索引从
0
运行到
x-1
。但是由于数组的限制,您应该使用and:


Low()
High()
不是主题,但是要知道它们也可以用于静态数组,并且它们返回实际的数组边界——我总是使用High和Low来实现这一点)

如果
x
是一个变量,那么这实际上是行不通的。所谓的静态数组的范围必须是一个常量表达式,即它必须在编译时已知

所以你想要的东西不会起作用

不过,在FreePascal中,您可以使用。它们的长度可以在运行时设置和更改

var
  x: Integer;
  s: array of Real;
  n: array of string[30]; // why not just string?
后来:

  x := someUserInput(); // pseudo code!
  SetLength(s, x);
  SetLength(n, x);
您应该知道动态数组是基于
0
的,因此索引从
0
运行到
x-1
。但是由于数组的限制,您应该使用and:


Low()
High()
不是主题,但要知道它们也可以用于静态数组,并且它们返回实际的数组边界——我总是使用High和Low)

这里并没有使用@RudyVelthuis建议的动态数组这样的托管类型那么简单,而是提供了一个更有趣的解决方案,提供了一些理解 关于其内部工作原理:)


这里并没有使用@RudyVelthuis建议的动态数组这样的托管类型那么简单,但更有趣的解决方案提供了一些理解 关于其内部工作原理:)



你是不是少了一个
?是的,这只是代表我的一个输入错误,我没有遗漏任何内容;在我的程序中,你需要一个动态数组。下次请说明确切的编译器和版本。你不缺少一个
?是的,这只是代表我的一个输入错误,我没有遗漏任何内容;在我的程序中,你需要一个动态数组。下次请说明确切的编译器和版本。是的,比一个简单的动态数组有趣得多。这简直太糟糕了advice@DavidHeffernan在我对代码的介绍中,你不明白什么?为什么停在这里。为什么不把整件事都写在asm里呢。这是非常糟糕的建议。因此我投了一票。你说这是个笑话。“你希望得到什么样的回应?”大卫·费弗南我的回答是半开玩笑,但也是出于教育目的。基础知识(直到汇编程序)的运气导致了“吸血鬼活动”:)是的,比简单的动态数组更“有趣”。这简直是糟糕透顶advice@DavidHeffernan在我对代码的介绍中,你不明白什么?为什么停在这里。为什么不把整件事都写在asm里呢。这是非常糟糕的建议。因此我投了一票。你说这是个笑话。“你希望得到什么样的回应?”大卫·费弗南我的回答是半开玩笑,但也是出于教育目的。幸运的基础知识(直到装配工)导致“吸血鬼活动”:)谢谢!我似乎遇到了更多的问题,我认为这些问题与数组有关,它表示错误:运算符没有重载:“SmallInt的动态数组”div“SmallInt”,“SmallInt的动态数组”mod“ShortInt”。我把我的整个计划都放在了吸血鬼行动中detected@David:是的,确实如此。@LeCarloVC:如果您有更多问题,您可以将其作为新问题发布。在体育运动中,移动球门柱不受欢迎,这里也不受欢迎。@LeCarloVC:我发现您的代码有很多问题。如果正确地格式化代码,您可能也可以看到它们。不要混合不同风格的关键字和工作的缩进。而
a-b
是减法。谢谢!我似乎遇到了更多的问题,我认为这些问题与数组有关,它表示错误:运算符没有重载:“SmallInt的动态数组”div“SmallInt”,“SmallInt的动态数组”mod“ShortInt”。我把我的整个计划都放在了吸血鬼行动中detected@David:是的,确实如此。@LeCarloVC:如果您有更多问题,您可以将其作为新问题发布。在体育运动中,移动球门柱不受欢迎,这里也不受欢迎。@LeCarloVC:我发现您的代码有很多问题。如果正确地格式化代码,您可能也可以看到它们。不要混合不同风格的关键字和工作的缩进。而
a-b
是减法。