read()可变长度的字符串

时间:2012-11-25 18:53:08

标签: pascal freepascal

我有两行值(从控制台输入)看起来像这样:

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;

2 个答案:

答案 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进行拆分。