function classes(o:integer): String;
var allclasses : array[1..7] of String;
begin
allclasses[1]:= 'class1';
allclasses[2]:= 'class2';
allclasses[3]:= 'class3';
allclasses[4]:= 'class4';
allclasses[5]:= 'class5';
allclasses[6]:= 'class6';
allclasses[7]:= 'class7';
classes := allclasses[o];
end;
上面你可以看到一个函数,它应该接收一个整数并给出存储在数组中的字符串结果。
procedure loadthis(chosen : string);
var f: text;
i : integer;
begin
Assign(f, 'files\'+chosen+'.txt');
Reset(f);
ReadLn(f, i);
MyChar.clas := classes[i];
end;
调用此过程时,它会调用“类”函数。请注意,Mychar是一个全局变量。
begin
loadthis(FileName);
ReadLn;
Readln
end.
Ant这是主程序,它调用“loadthis”程序。
我不知道什么是错的,但我收到了这些错误:
这两个错误来自这一行:
MyChar.clas := classes[i];
。我真的不知道出了什么问题,也许我无法通过程序调用函数?请帮忙。
答案 0 :(得分:1)
您尝试将其作为数组索引访问,但它需要是一个函数调用:
MyChar.clas := classes(i); { note () instead of [] }
您也应该添加一些范围检查。如果有人将20
放入文本文件,会发生什么?您的数组只包含索引1
到7
的项目,因此当您使用超出范围值调用classes(20)
时,您将收到运行时错误。
(您可能会使用 allclasses
的常量数组来减少您的代码,但您的教师可能还没有那么远。)
鉴于你对没有教练的评论,这里有一个关于更好的方法来处理这个功能的建议:
function classes(o:integer): String;
const
allclasses: array[1..7] of string = ('class1',
'class2',
'class3',
'class4',
'class5',
'class6',
'class7');
begin
{
Low() returns the lowest index of the array, and
High() returns the highest. The if statement makes sure
that o is between them. It is the range check I mentioned.
}
if (o >= Low(allclasses)) and (o <= High(allclasses)) then
classes := allclasses[o]
else
classes := '';
end;