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;
如果您需要不同类型的值(例如 Integer
s),您需要在构建值列表后进行转换(例如 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
所以我在想如何仅通过使用 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;
如果您需要不同类型的值(例如 Integer
s),您需要在构建值列表后进行转换(例如 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