我有两行值(从控制台输入)看起来像这样:
David 89000
Peter 99500
Jim 23999
END 1
有没有办法将字符串和数字保存到变量中,而不是在不知道字符串长度时循环读取字符?
str:=''; salary:=0; i:=1;
while str<> 'END' do
begin
str:=''; salary:=0;
read(ch);
while ch <> ' ' do
begin
str:=str+ch;
read(ch);
end;
read(salary);
array[i].name:=str;
array[i].salary:=salary;
i:=i+1;
readln;
end;
答案 0 :(得分:2)
您可以通过一次调用ReadLn
来执行此操作,然后自行解析输入:
var
TextIn: string;
Person: string;
Salary: Integer;
begin
while true do
begin
ReadLn(TextIn); // Requires user to hit Enter
if Copy(TextIn, 1, 3) <> 'END' then
begin
Person := Copy(TextIn, 1, Pos(' ', TextIn) - 1);
Salary := StrToInt(Copy(TextIn, Pos(' ', TextIn) + 1, 255);
end
else
Exit;
end;
end;
我没有包含任何错误检查(应该在那里),因为您的原始代码也没有。
答案 1 :(得分:0)
不使用标准I / O功能。当然,您可以将该代码放在单独的过程中,或者使用tstringlist进行拆分。