Delphi数组:变量Myvar可能未初始化

时间:2019-05-18 12:39:23

标签: 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.

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

2 个答案:

答案 0 :(得分:2)

在标题中您谈到了变量STORY_ID,但是代码中没有显示任何此类变量。为了将来参考,请在发布之前仔细校对您的问题。

您已经声明了动态数组:

TASK_XREF

,即14个字符串(短字符串)的数组。但是您从未设置此数组的长度,因此它根本无法容纳任何字符串。

使用$query = mysqli_query($db, "SELECT * FROM patient_details WHERE discharged_date >= '2019-03-01' AND discharged_date < '2019-03-30'"); while ($row = mysqli_fetch_array($query)){ $result = $row['hosp_patient_no']; $query2 = mysqli_query($db, "SELECT deficiencies_id FROM deficiency_patient_details WHERE hosp_patient_no = '$result'"); } 为数组中的项目分配空间。

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

S: array of String[14];

,然后在while循环中,例如在procedure SetLength(var S: <string or dynamic array>; NewLength: Integer);之前

SetLength()

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

答案 1 :(得分:0)

您得到的消息是正确的,因为您仅在while not eof循环内使用数组。那时,编译器无法知道文件的内容。就他而言,这可能是空白的。如果文件确实为空,他将完全跳过while not eof部分,直接进入数组编写部分。由于从未使用过该数组,因此它没有定义的值,因此没有此消息。

解决方案很简单:将数组的值初始化为0:

        program TFE;

        {$APPTYPE CONSOLE}

        uses
          SysUtils,
          StrUtils,
          Crt;

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

        begin

        SetLength(s,10); //10 is an example
        for i:=0 to Length(s) do
         s[i]:='';
        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.

深入研究代码,您定义了MovieListMovieInfo,但是您仅使用了MovieInfo。为什么?