Мой вопрос в том, как я могу прочитать некоторое количество целых чисел, которые пользователь вводит на стандартный ввод, и поместить их в массив. Однако я не знаю, сколько цифр пользователь будет вводить, и я не могу спросите его об этом? Пользователь вводит числа в одну строку.Pascal, чтение неизвестного числа целых чисел
0
A
ответ
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: Некоторые показания:
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
Чтение пользовательский ввод в виде строки, а затем использовать [WordCount] (http://www.freepascal.org/docs-html/rtl/strutils/wordcount.html) и [ExtractWord] (HTTP: // WWW .freepascal.org/docs-html/rtl/strutils/extractword.html) для получения значений и каждого значения. BTW Это лишь одно из многих решений. – Abelisto
Спасибо за это, но мне было интересно, есть ли более простой способ, например, используя цикл '' while not eoln ''? – nikojov
@ lurker 'while not eoln do begin Read (i); Напишите (i, ''); end; 'works fine (' i: Integer; '), за исключением того, что он не позволяет пробелы перед' eoln'. – Abelisto