所以我在想如何通过使用空格来分隔它们,如何在一条线上请求输入未知数量的变量...... 例如,如果我想输入的变量数量是已知的,那么代码就是..
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])
但是通过使用循环和数组,我仍然只能在每一行输入一个变量,而不是由空格分隔的任何数字。有没有办法做到这一点?
答案 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