Заполнить массив так, чтобы вводимые элементы располагались на одной строчке экрана. Всегда пользовался Readln, т.к. он работает почему-то так же как и Read. Препод рассказывает, что типо не так. Как это можно осуществить без СRT?
Добавлено через 14 мин. Ну строку разделять на числа - тоже не вариант
volvo
28.09.2010 23:07
Цитата
Всегда пользовался 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
29.09.2010 3:23
С файлами вопросов нет (Обманул, именно в этих целях пользовался ).
Меня интересует именно экран при вводе данных.
for i := 1 to 2 do read(a[i])
ничем не отличается от
for i := 1 to 2 do readln(a[i])
Lapp
29.09.2010 3:26
Цитата(sheka @ 28.09.2010 19:35)
Заполнить массив так, чтобы введеные элементы располагались на одной строчке экрана.
Sheka, "введенные" или "вводимые"? В смысле - ввод в одной строке? Ты все же ставь задачу точнее. Я не придираюсь. Тут было как-то хоть ясно из контекста, в другой задаче может и не быть.
sheka
29.09.2010 3:27
Понял. Исправил.
volvo
29.09.2010 6:23
Цитата
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
29.09.2010 8:44
Цитата(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, это ты лажанулся.. К словам volvo добавить особенно нечего, но я пишу, чтобы сказать: понимание именно таких нюансов выводит тебя на уровень "не новичка". Постарайся покрутить это все и разобраться до конца. Особенно, кстати, насчет непочищенного буфера - очень частая ошибка. Сколько тут было вопросов типа: "я поставил ReadLn для задержки, а она не задерживается!" И ставят по десять ReadLn'ов, и честят компилятор за "глюки"..
sheka
29.09.2010 23:43
Да, действительно. Чистить буфер так?
Цитата
MemW[Seg0040:$1C]:=MemW[Seg0040:$1A];{уравнять адреса начала и конца буфера} или так while keypressed do readkey;
А если я пишу в Делфи, что тогда делать?
TarasBer
30.09.2010 0:56
> MemW[Seg0040:$1C]:=MemW[Seg0040:$1A]; Вай, зачем так сложно?
for i := 1 to 2 do read(a[i]); readln;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.