我正在为一个学校程序(电影应用程序)工作,但是我的阵列出现了问题。我的应用已关闭,但未显示任何内容。
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.
这是我目前的全部代码。 有人可以帮助我吗?
答案 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.
深入研究代码,您定义了MovieList
和MovieInfo
,但是您仅使用了MovieInfo
。为什么?