Pascal,读取未知数量的整数

Pascal,读取未知数量的整数,pascal,freepascal,Pascal,Freepascal,我的问题是如何读取用户在标准输入中输入的一些整数,并将它们放入数组中。但我不知道用户将输入多少个数字,我不能问他这个问题?用户在一行中输入数字。好的,根据评论,演示了三种方法: program readmultiint; {$mode objfpc}{$H+} uses StrUtils; const CMaxValues = 3; var s: string; darr: array of Integer; sarr: array [0..CMa

我的问题是如何读取用户在标准输入中输入的一些整数,并将它们放入数组中。但我不知道用户将输入多少个数字,我不能问他这个问题?用户在一行中输入数字。

好的,根据评论,演示了三种方法:

program readmultiint;

{$mode objfpc}{$H+}

uses
    StrUtils;

const
    CMaxValues = 3;

var
    s: string;
    darr: array of Integer;
    sarr: array [0..CMaxValues-1] of Integer;
    i, cnt: Integer;
begin
    // Dynamic array using WordCount
    Writeln('Enter values:');
    Readln(s);
    cnt := WordCount(s, StdWordDelims);
    SetLength(darr, cnt); // Allocate room for values
    for i := 0 to cnt - 1 do
        Val(ExtractWord(i + 1, s, StdWordDelims), darr[i]);

    for i in darr do
        Writeln(i);

    // Dynamic array usin EOLN

    SetLength(darr, 0);
    Writeln('Enter values:');
    while not eoln do
    begin
        SetLength(darr, Length(darr) + 1); // Expand array for next value
        Read(darr[High(darr)]);
    end;
    Readln; // Read <Enter> itself

    for i in darr do
        Writeln(i);

    // Static array

    cnt := 0;
    Writeln('Enter values:');
    while (not eoln) and (cnt < CMaxValues) do // Reads not more then CMaxValues values
    begin
        Read(sarr[cnt]);
        Inc(cnt);
    end;
    Readln; // Read <Enter> itself

    for i := 0 to cnt-1 do
        Writeln(sarr[i]);
end.
程序readmultiint;
{$mode objfpc}{$H+}
使用
支柱;
常数
Cmax值=3;
变量
s:字符串;
darr:整数数组;
sarr:整数的数组[0..CMaxValues-1];
i、 cnt:整数;
开始
//使用WordCount的动态数组
Writeln('输入值:');
Readln(s);
cnt:=字数(s,stdwordelims);
设置长度(darr,cnt);//为价值分配空间
对于i:=0到cnt-1 do
Val(提取字(i+1,s,stdwordelims),darr[i]);
因为我在黑暗中
书面(i);
//EOLN中的动态数组
设定长度(darr,0);
Writeln('输入值:');
虽然不是我做的
开始
设置长度(darr,长度(darr)+1);//展开数组以获取下一个值
读取(darr[高(darr)];
结束;
Readln;//自述
因为我在黑暗中
书面(i);
//静态阵列
cnt:=0;
Writeln('输入值:');
而(非eoln)和(cnt
请随意使用其中一个或提供您自己的:)

附:一些阅读资料:


好的,根据评论,演示了三种方法:

program readmultiint;

{$mode objfpc}{$H+}

uses
    StrUtils;

const
    CMaxValues = 3;

var
    s: string;
    darr: array of Integer;
    sarr: array [0..CMaxValues-1] of Integer;
    i, cnt: Integer;
begin
    // Dynamic array using WordCount
    Writeln('Enter values:');
    Readln(s);
    cnt := WordCount(s, StdWordDelims);
    SetLength(darr, cnt); // Allocate room for values
    for i := 0 to cnt - 1 do
        Val(ExtractWord(i + 1, s, StdWordDelims), darr[i]);

    for i in darr do
        Writeln(i);

    // Dynamic array usin EOLN

    SetLength(darr, 0);
    Writeln('Enter values:');
    while not eoln do
    begin
        SetLength(darr, Length(darr) + 1); // Expand array for next value
        Read(darr[High(darr)]);
    end;
    Readln; // Read <Enter> itself

    for i in darr do
        Writeln(i);

    // Static array

    cnt := 0;
    Writeln('Enter values:');
    while (not eoln) and (cnt < CMaxValues) do // Reads not more then CMaxValues values
    begin
        Read(sarr[cnt]);
        Inc(cnt);
    end;
    Readln; // Read <Enter> itself

    for i := 0 to cnt-1 do
        Writeln(sarr[i]);
end.
程序readmultiint;
{$mode objfpc}{$H+}
使用
支柱;
常数
Cmax值=3;
变量
s:字符串;
darr:整数数组;
sarr:整数的数组[0..CMaxValues-1];
i、 cnt:整数;
开始
//使用WordCount的动态数组
Writeln('输入值:');
Readln(s);
cnt:=字数(s,stdwordelims);
设置长度(darr,cnt);//为价值分配空间
对于i:=0到cnt-1 do
Val(提取字(i+1,s,stdwordelims),darr[i]);
因为我在黑暗中
书面(i);
//EOLN中的动态数组
设定长度(darr,0);
Writeln('输入值:');
虽然不是我做的
开始
设置长度(darr,长度(darr)+1);//展开数组以获取下一个值
读取(darr[高(darr)];
结束;
Readln;//自述
因为我在黑暗中
书面(i);
//静态阵列
cnt:=0;
Writeln('输入值:');
而(非eoln)和(cnt
请随意使用其中一个或提供您自己的:)

附:一些阅读资料:


好的,我只想补充一个答案。感谢大家的帮助,这是根据建议编写的代码。我添加了一行代码,用于向后写入数组,只是为了让大家看到它读得很好

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.

好的,我只想补充一个答案。感谢大家的帮助,这是根据建议编写的代码。我添加了一行代码,用于向后写入数组,只是为了让你们看到它读得很好

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.

将用户输入读取为字符串,然后使用和函数获取值count和每个值。顺便说一句,这只是众多解决方案中的一个。谢谢你,但我想知道是否有更简单的方法,例如使用“whilenoteoln”循环?@潜伏者
whilenoteoln do begin Read(i);写(我,);结束
工作正常(
i:Integer;
),但它在
eoln
@Abelisto之前不允许有空格。谢谢你在我发表评论后想到了这一点。很好。将用户输入读取为字符串,然后使用和函数获取值count和每个值。顺便说一句,这只是众多解决方案中的一个。谢谢你,但我想知道是否有更简单的方法,例如使用“whilenoteoln”循环?@潜伏者
whilenoteoln do begin Read(i);写(我,);结束
工作正常(
i:Integer;
),但它在
eoln
@Abelisto之前不允许有空格。谢谢你在我发表评论后想到了这一点。接得好。它很有创意:)祝你好运。它很有创意:)祝你好运。