Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ oператоры read и readln в Pascal

Автор: коваль 18.11.2007 21: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 принимают верные значения.
Кто знает, в чем дело?

Автор: коваль 18.11.2007 21:13

Цитата(коваль @ 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 19.11.2007 0:14

Ты разделом не ошибся ? Переносится в задачи.

Автор: volvo 19.11.2007 1:36

Цитата
Кто знает, в чем дело?
А ты не знаешь? Оператор Read НЕ читает символы перевода строки, они остаются в буфере, и при следующей попытке вызова Read/ReadLn читаются именно эти #13#10... Если во втором Read-е вводятся числа, то ничего страшного, пока они не будут введены, Read будет запрашивать ввод пользователя (поскольку Integer не может принять значение #13, так же как и Real, то "оставшиеся" символы будут пропущены), но если Char-ы или строки - то они будут прочитаны сразу...