Pascal - 在 1 行上输入不同数量的变量

Pascal - Input a various number of variables on 1 line

所以我在想如何仅通过使用 space 将它们分开来要求在一行中输入未知数量的变量... 例如,如果我想输入的变量数量是已知的,代码将是..

Readln(a,b,c)

这将要求输入 3 个变量,按 space 拆分或在每个变量后按回车键,但使用 space 拆分是我想要的。 但是如果我不知道变量的数量并且我需要在旅途中创建它们怎么办?..比如说,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])

但是通过使用循环和数组,我仍然只能在每一行输入一个变量,而不是任何由 space 分隔的数字。有什么办法吗?

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

例如:

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;

如果您需要不同类型的值(例如 Integers),您需要在构建值列表后进行转换(例如 StrToInt)。

为避免使用一些额外的 类,请使用 Read 而不是 ReadLn。这段代码可能会有帮助:

program Project1;

var
    input: array of Integer;
    i, j: Integer;
begin
    SetLength(input, 1000);
    i := 0;
    repeat
        Read(input[i]);
        Inc(i);
    until input[i-1] = 0;

    for j := 0 to i-1 do
        Writeln(input[j]);

    Readln;
    Readln;
end.

和控制台内容(仅作为示例):

1 4 7 9 6 3 6
4 7 3 1 8
9 4 6
0
1
4
7
9
6
3
6
4
7
3
1
8
9
4
6
0

终端是操作员和计算机之间进行对话的主要工具,因此它当然可以使用某些协议处理几乎所有类型和种类的输入数据:)

这里试试这段代码,你甚至不需要知道到底有多少变量,你只需要知道它们是什么类型(在我的例子中我使用了整数)并用它们制作一个数组.

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