Кстати, если писать просто "Read;", а не "ReadLn;", то всё нормально.. Но я хочу именно ReadLn... =\
Юзаю обычный Turbo Pascal досовский
Спасибо за внимание.
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
| ApTeMoHnv |
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Артём Репутация: 0 |
При использовании в своём коде 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 - МАКРОС, а не процедура, а следовательно, раскрывается компилятором по-разному... Теперь понятнее, что происходит? |
ApTeMoHnv ReadLn после "assign" и "close" 25.04.2009 3:35
volvo Ты хочешь здесь устроить соревнование телепатов чт… 25.04.2009 4:40
Contest Мне вот эти слова особено понравились:
если бы я в… 25.04.2009 4:52
Lapp Извиняюсь, последний пост мой.. 25.04.2009 4:54
Lapp Сейчас зашел и обратил внимание на то, что как-то … 25.04.2009 8:37
volvo Lapp, а ты что, никогда не завершал программу Read… 25.04.2009 11:47
Lapp когда то же самое делает автор?Боюсь, что не то же… 25.04.2009 21:46
ApTeMoHnv
Боюсь, что не то же самое :). Речь, как я понял,… 26.04.2009 2:47
TarasBer :
uses crt,dos;
var {здесь файловая переменная не … 26.04.2009 15:32
volvo А теперь, что называется "вопрос на засыпку… 26.04.2009 17:28
ApTeMoHnv По-идее, в 1ом случае, будет выдавать ошибку 104, … 27.04.2009 3:18
volvo По опыту? Ну, тогда запусти второй вариант и посмо… 27.04.2009 5:25
ApTeMoHnv Из источника по подготовке к информатике: "Ос… 29.04.2009 0:59
TarasBer Но то, что у меня не учитывал Enter, а сразу выход… 29.04.2009 1:07
ApTeMoHnv Вроде бы понятней.. Только вот почему при использо… 29.04.2009 2:16
TarasBer RTFM сообщение номер 9 в этой теме.
Потом что Read… 29.04.2009 2:21
ApTeMoHnv А, всё.. Теперь точно понял.. Перечитал..)
В общем… 29.04.2009 3:25![]() ![]() |
|
Текстовая версия | 11.04.2026 19:48 |