0

我有两个值的行(来自控制台的输入),看起来像这样:

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;
4

2 回答 2

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;

我没有包括任何错误检查(应该在那里),因为您的原始代码也没有。

于 2012-11-25T21:05:30.883 回答
0

不适用于标准 I/O 功能。当然,您可以将该代码放在单独的过程中,或与 tstringlist 分开。

于 2012-11-25T20:22:42.673 回答