Помощь - Поиск - Пользователи - Календарь
Полная версия: Read
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sheka
Заполнить массив так, чтобы вводимые элементы располагались на одной строчке экрана.
Всегда пользовался Readln, т.к. он работает почему-то так же как и Read.
Препод рассказывает, что типо не так.
Как это можно осуществить без СRT?

Добавлено через 14 мин.
Ну строку разделять на числа - тоже не вариант lol.gif
volvo
Цитата
Всегда пользовался Readln, т.к. он работает почему-то так же как и Read.
Неправда. Они работают по-разному. Read не переходит к следующей строке входного файла после прочтения данных.

var
a: array[1 .. 10] of integer;
x: integer;
i, j: integer;
begin
i := 0;
while not eoln do
begin
read(X);
inc(i);
a[i] := X;
end;

for j := 1 to i do
write(a[j]:4);
writeln;
end.
читает столько чисел, сколько есть, до конца строки. Главное - чтоб не вылететь за границы массива.
sheka
С файлами вопросов нет (Обманул, именно в этих целях пользовался smile.gif).

Меня интересует именно экран при вводе данных.

for i := 1 to 2 do read(a[i])

ничем не отличается от
for i := 1 to 2 do readln(a[i])

Lapp
Цитата(sheka @ 28.09.2010 19:35) *
Заполнить массив так, чтобы введеные элементы располагались на одной строчке экрана.
Sheka, "введенные" или "вводимые"?
В смысле - ввод в одной строке? Ты все же ставь задачу точнее. Я не придираюсь. Тут было как-то хоть ясно из контекста, в другой задаче может и не быть.
sheka
Понял. Исправил.
volvo
Цитата
for i := 1 to 2 do read(a[i])

ничем не отличается от
for i := 1 to 2 do readln(a[i])

Да? А по-моему, отличается.

Следи за руками: вариант №2 - "вводим строку 4<пробел><пробел><пробел>8 и жмем на ввод". Что имеешь?
А ничего. Цикл от 1 до 2? Значит, должно быть 2 символа конца строки. Первое число (4) занесено в a[1], второе - проигнорировано, от тебя ожидается ввод еще одного числа вместе с Enter-ом.

Вариант №1 - "вводим строку 4<пробел><пробел><пробел>8 и жмем на ввод". Что имеем? Все прекрасно, цикл закончился, и a[1] и a[2] содержат новые значения. Правда вот буфер клавиатуры почистить не мешает, там остался символ #13, и если ты еще что-то будешь читать, то велика вероятность, что это "что-то" прочитается не совсем так, как ты задумывал, в особенности если это будет строка или символ.

То есть, поведение двух вышеозначенных кусков кода СОВЕРШЕННО разное, одинаковым его даже при очень бурной фантазии нельзя назвать...
Lapp
Цитата(sheka @ 29.09.2010 0:23) *
for i := 1 to 2 do read(a[i])

ничем не отличается от
for i := 1 to 2 do readln(a[i])
Да, Sheka, это ты лажанулся.. smile.gif
К словам volvo добавить особенно нечего, но я пишу, чтобы сказать: понимание именно таких нюансов выводит тебя на уровень "не новичка". Постарайся покрутить это все и разобраться до конца. Особенно, кстати, насчет непочищенного буфера - очень частая ошибка. Сколько тут было вопросов типа: "я поставил ReadLn для задержки, а она не задерживается!" И ставят по десять ReadLn'ов, и честят компилятор за "глюки"..
sheka
Да, действительно.
Чистить буфер так?
Цитата
MemW[Seg0040:$1C]:=MemW[Seg0040:$1A];{уравнять адреса начала и конца буфера}
или так
while keypressed do readkey;

А если я пишу в Делфи, что тогда делать?
TarasBer
> MemW[Seg0040:$1C]:=MemW[Seg0040:$1A];
Вай, зачем так сложно?

for i := 1 to 2 do read(a[i]);
readln;

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.