2016-02-09 4 views
0

Мой вопрос в том, как я могу прочитать некоторое количество целых чисел, которые пользователь вводит на стандартный ввод, и поместить их в массив. Однако я не знаю, сколько цифр пользователь будет вводить, и я не могу спросите его об этом? Пользователь вводит числа в одну строку.Pascal, чтение неизвестного числа целых чисел

+1

Чтение пользовательский ввод в виде строки, а затем использовать [WordCount] (http://www.freepascal.org/docs-html/rtl/strutils/wordcount.html) и [ExtractWord] (HTTP: // WWW .freepascal.org/docs-html/rtl/strutils/extractword.html) для получения значений и каждого значения. BTW Это лишь одно из многих решений. – Abelisto

+0

Спасибо за это, но мне было интересно, есть ли более простой способ, например, используя цикл '' while not eoln ''? – nikojov

+0

@ lurker 'while not eoln do begin Read (i); Напишите (i, ''); end; 'works fine (' i: Integer; '), за исключением того, что он не позволяет пробелы перед' eoln'. – Abelisto

ответ

1

Ok, на основе замечаний, существует три способа продемонстрировали:

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. 

Вы можете использовать один из них или предоставить свой собственный :)

PS: Некоторые показания:

Dynamic arrays

Val procedure

for-in loop

2

Хорошо, у меня есть еще один ответ, который я бы хотел добавить. Спасибо за вашу помощь. Это код, написанный на основе предложений. Я добавил строку для отвода массива назад, так как вы можете видеть, что он хорошо читал ,

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. 
+0

Это творческий :) Удачи. – Abelisto