![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
ApTeMoHnv |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
При использовании в своём коде ReadLn'а (удивительно, да?
![]() ![]() ![]() Кстати, если писать просто "Read;", а не "ReadLn;", то всё нормально.. Но я хочу именно ReadLn... =\ Юзаю обычный Turbo Pascal досовский Спасибо за внимание. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Первая считывает информацию с клавиатуры после нажатия Энтер, не пропуская строки, а вторая после этого переходит на начало новой строки. Ну-ну... Во-первых, кто тебе сказал, что с клавиатуры? С потока ввода, который в настоящее время ассоциирован с клавиатурой - это да, но никак не с клавиатуры.Во-вторых, смотри что происходит: ты ассоциировал поток input с другим файлом, потом его закрыл... Что делает ReadLn? А вот что: она должна прочесть из потока символ перевода строки при любых условиях. Несмотря ни на что. У тебя файл input закрыт, поэтому ты при попытке чтения из него просто получаешь вылет по ошибке... Теперь смотрим на Read;. Что делает она? Она НЕ ОБЯЗАНА ничего читать из файла, потому что параметров нет, и читать, собственно, некуда. Посему Паскаль генерирует "пустышку", которая совершенно корректно ничего не делая, просто оставляет в покое файл. А закрыт он, или открыт - это ничего не меняет, в любом случае задержки до нажатия клавиши не будет. Как только ты напишешь Read(что-то);, ситуация меняется кардинальным образом. Теперь Read-у ЕСТЬ, что читать, он обязан прочесть то, что указано в списке параметров, будь то символ или число, или строку. А следовательно, вместо Read подставляется не "пустышка", а вызов процедуры, который читает из входного потока то значение, которое надо прочесть (скажем Read(ch); - если ch описан как Char, приведет к вызову ReadChar, а вызов Read(i) при i: Integer будет заменен на ReadInt), ты получаешь то же самое, что и в случае с ReadLn: при попытке чтения из закрытого потока - аварийный вылет из программы... А ты говоришь "знаю, в чем разница". Я ж дал подсказку, что Read - МАКРОС, а не процедура, а следовательно, раскрывается компилятором по-разному... Теперь понятнее, что происходит? |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 17:55 |