Pascal - 在1行输入各种变量

时间:2015-09-20 13:33:05

标签: input pascal lazarus freepascal

所以我在想如何通过使用空格来分隔它们,如何在一条线上请求输入未知数量的变量...... 例如,如果我想输入的变量数量是已知的,那么代码就是..

Readln(a,b,c)

这将要求输入3个变量,按空格分割或在每个变量后按Enter键,但是使用空格分割是我想要的。 但是如果我不知道变量的数量并且我需要在运行中创建它们呢?..说,n设置我需要输入的变量数。

readln(n);
( n = 2 )
readln(a,b..... any number of variables equal to n)

请注意,在n之后读取的变量数量需要等于n保持的数量,并且不能在var中预先设置。我尝试了不同的方法,但我想出的只是

readln(n)
for i := 0 to n-1 do
  readln(a[i])

但是通过使用循环和数组,我仍然只能在每一行输入一个变量,而不是由空格分隔的任何数字。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您应该考虑值为值本身的字符串。所以你读一次,变成一个变量。然后处理结果,即拆分空格并处理任何错误。

例如:

var
  ValuesSeparatedBySpaces: string;
  ValueList: TStringList;
  I: Integer;
begin
  // Read all values together
  ReadLn(ValuesSeperatedBySpaces);
  // Create a list to split them into
  ValueList := TStringList.Create;
  try
    // Use the space character and only the space character for splitting
    ValueList.Delimiter := ' ';
    ValueList.StrictDelimiter := True;
    // Do the splitting
    ValueList.DelimitedText := ValuesSeparatedBySpaces;
    // Show the result
    for I := 0 to ValueList.Count - 1 do
      Writeln(ValueList[I]);
  finally
    // Clean up
    LValueList.Free;
  end;

如果您需要其他类型的值(例如Integer s),则需要在构建值列表后进行转换(例如StrToInt)。

答案 1 :(得分:0)

在这里尝试使用这段代码,你甚至不需要知道变量究竟是多么完整,你需要知道的是它们是什么类型(在我的例子中我用了整数)并用它们制作一个数组。 / p>

program backo;
 var niz:array [1..100] of integer;
  n,  i:integer;

 begin
i:=1;
    writeln('enter elements of array');
    read(niz[i]);
    while not eoln do
            begin
                    i:=i+1;
                    read(niz[i]);
            end;
    for n:=i downto 1 do
    writeln(niz[n]);
 end.

最后你有'i'中的变量数,你可以向后写你的数组,例如输入是:1 3 9 3 4 9, 你的输出将是

9

4

3

9

3

1