Помощь - Поиск - Пользователи - Календарь
Полная версия: oператоры read и readln в Pascal
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
коваль
Если перед вводом символов используется оператор READ, то первые два символа "забиваются" кодами 13 и 10.
При использовании оператора READLN ввод символов происходит нормально:
writeln('vvedi veschesstvennye chisla X,Y'):
read(X,Y);
writeln(' ':25,'veschesstvennye chisla');
writeln(' ':5,'standartny fopmat',' ':25,'zadannaya shirina polya');
writeln(' ':2,X,' ',Y,' ':10,'X=',X:8:2, 'Y=',Y:6:3);
writeln('vvedi simvoly S1,S2,S3');
read(S1,S2,S3);
writeln(' ':20,'simvolnaya peremennaya','S1=',S1, 'S2=',S2, 'S3=',S3);
write('pechat simvolnyh peremennyh s shirinoj polya 5:',S1:5,S2:5,S3:5);
В этом случае s1=#13, s2=#10, s3 принимает значение, которое должно было принять s1.
Если заменить оператор read(X,Y) на readln(X,Y), то переменные s1,s2,s3 принимают верные значения.
Кто знает, в чем дело?
коваль
Цитата(коваль @ 18.11.2007 17:07) *

Если перед вводом символов используется оператор READ, то первые два символа "забиваются" кодами 13 и 10.
При использовании оператора READLN ввод символов происходит нормально:
writeln('vvedi veschesstvennye chisla X,Y'):
read(X,Y);
writeln(' ':25,'veschesstvennye chisla');
writeln(' ':5,'standartny fopmat',' ':25,'zadannaya shirina polya');
writeln(' ':2,X,' ',Y,' ':10,'X=',X:8:2, 'Y=',Y:6:3);
writeln('vvedi simvoly S1,S2,S3');
read(S1,S2,S3);
writeln(' ':20,'simvolnaya peremennaya','S1=',S1, 'S2=',S2, 'S3=',S3);
write('pechat simvolnyh peremennyh s shirinoj polya 5:',S1:5,S2:5,S3:5);
В этом случае s1=#13, s2=#10, s3 принимает значение, которое должно было принять s1.
Если заменить оператор read(X,Y) на readln(X,Y), то переменные s1,s2,s3 принимают верные значения.
Кто знает, в чем дело?
Использовался BP 7.0.
klem4
Ты разделом не ошибся ? Переносится в задачи.
volvo
Цитата
Кто знает, в чем дело?
А ты не знаешь? Оператор Read НЕ читает символы перевода строки, они остаются в буфере, и при следующей попытке вызова Read/ReadLn читаются именно эти #13#10... Если во втором Read-е вводятся числа, то ничего страшного, пока они не будут введены, Read будет запрашивать ввод пользователя (поскольку Integer не может принять значение #13, так же как и Real, то "оставшиеся" символы будут пропущены), но если Char-ы или строки - то они будут прочитаны сразу...

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