Delphi 数组 : Variable Myvar might not been initialized

标签 delphi pascal

我正在为学校(电影应用程序)制定一个计划,但我的阵列有问题。我的应用程序关闭但没有显示任何内容。

    program TFE;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  StrUtils,
  Crt;

var
  MovieList, MovieInfo: Text;
  Choice: Byte;
  i: Integer;
  L: String;
  S: array of String[14];

begin

i := 0
Assign(MovieInfo, 'MovieInfo.txt');
    Reset(MovieInfo);
Readln(Choice);
i := 0;
ClrScr;
    While not eof (MovieInfo) do                  
      begin
        Readln(MovieInfo, L);
        S[i] := L;
        i := i + 1;
      end;
Writeln(S[Choice]);
Readln;

end.

这是我目前的所有代码。
有人可以帮助我吗?

最佳答案

在标题中,您谈到了一个变量 MyVar ,但代码没有显示任何这样的变量。为了将来引用,请在发布前仔细校对您的问题。

您已经声明了一个动态数组:

S: array of String[14];

即 14 个字符串(短字符串)的数组。但是你从来没有设置过这个数组的长度,所以它根本不能保存任何字符串。

使用procedure SetLength(var S: <string or dynamic array>; NewLength: Integer);为数组中的项目分配空间。

由于您不知道(我推测)文件中可能有多少部电影,您必须首先分配一些数量,然后准备扩展数组(通过新调用 SetLength() )如果数组之前被填满从文件中读取所有电影。例如,初始化(在 while 循环之前)有 10 部电影的空间:
SetLength(S, 10);

然后在while循环中,例如就在 ReadLn() 之前,
if i > (Length(S)-1) then
  SetLength(S, Length(S)+10);

另一条评论是,当要求用户选择时,不会向用户显示任何提示,但也许这仍在开发中;-)

关于Delphi 数组 : Variable Myvar might not been initialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56199027/

相关文章:

delphi - Delphi中 "&"运算符是什么意思?

c++ - 在 firemonkey 中加载一个 dylib

android - 我如何从 Android 版 FireMonkey 中的 GPS 传感器获取当前日期和时间?

delphi - 如何从DataSnap服务器返回DataSet?

embedded - 哪些 pascal 编译器可以针对没有操作系统的嵌入式 ARM?

Delphi:如何拥有非连续子范围枚举类型?

delphi - 有没有一个函数可以将圆的度数移动到0以上?

delphi - 有没有办法获得与在运行时为 PEFlags 设置编译器标志相同的结果?

delphi - 如何在 Pascal 中的另一个过程中调用一个过程

Delphi:使用 System.New() 代替局部变量除了节省少量内存之外还有什么优点?