Набор строки и выход из неё в любой момент |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Набор строки и выход из неё в любой момент |
4epenOK |
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: 0 |
Здравствуйте!
У меня возникла проблемка, надеюсь на вашу помощь. Пишу я программу по вычислению среднего балла учеников. Нужно чтобы можно было выйти из программы в любой момент времени сразу после нажатия Esc. Проблема заключается в том, что при вводе имени ученика я не могу это реализовать. Пробовал сделать вводить-выводить посимвольно каждую букву, но появились какие-то глюки. Дело в том, что нужно ещё реализовать поддержку клавиш Del, Backspace, end, home. Имя ученика может состоять из любых символов. Компилятор Turbo Pascal 7.0 -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
volvo |
Сообщение
#2
|
Гость |
|
klem4 |
Сообщение
#3
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Типа этого ?
procedure ReadWord; -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
T i m e |
Сообщение
#4
|
|||
Новичок Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: -1 |
Просто используй readkey. Знаешь как она работает?
Сообщение отредактировано: volvo - -------------------- Time have not meaning. Mind - this is main...
|
|||
4epenOK |
Сообщение
#5
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: 0 |
Признаю свою ошибку. Я не указал, что длина имени должна быть не более 25 символов и при вводе наряду с клавишами Del, End, Home, Space, нужно чтоб работали клавиши стрелки (влево и вправо), а клавиши F1-F12 не работали. Символы могут быть любые (русские-английские буквы, цифры, знаки и т.д.) Коды, которые вы привели , работают, но это не совсем то, что нужно. Как работать с байтами я не знаю.
Вот часть моей программы, которая, понятное дело, глючит.
{ name - имя учащегося n - номер ученика по счёту a - счётчик i - количество "неизвестных" symbol - запоминает нажатую клавишу } Сообщение отредактировано: 4epenOK - -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
volvo |
Сообщение
#6
|
Гость |
Тогда вот так (не стал привязывать функцию к твоему интерфейсу, нехорошо это; функция должна вводить строку, интерфейс здесь ни при чем - не надо перемешивать его с логикой программы):
uses crt; Тестируй как следует - глюки могут проявиться, ибо я проверял под 32-битным компилером, хотя и в режиме совместимости с TP... |
4epenOK |
Сообщение
#7
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: 0 |
всё идёт норм, но эта строка в любом случае не будет пустой, после нажатия Enter. Даже если ты ничего не ввёл.
Если ты после запуска проги сразу жмёшь enter, то lenght(s) будет равно 1, а команда ord(s[1]) выдаст 1. А ведь должно быть lenght(s)=0. Кроме того после выполнения программы координата x почему-то устанавливается на 1. То есть, если дополнить прогу так: убрать в конце writeln('s = ', s); и написать write(':'); readln;; то двоеточие выведется в начале строки, а по идее должен вывестись сразу после строки. Почему так? Или это я что-то не так делаю -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
volvo |
Сообщение
#8
|
Гость |
Я же говорил, что возможны недоработки... Исправление будет совсем небольшое: перед
#27: добавить #13: ; { <--- То есть, если нажат Enter - его НЕ обрабатывать, а выходить сразу }Тогда будет работать, как ты и сказал... |
4epenOK |
Сообщение
#9
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: 0 |
Сделал я как ты сказал. Поначалу всё пошло. Но потом, когда я начал подстраивать её под себя, опять появились траблы. Я повставлял write(lenght(s)) в нескольких местах и прога начала мне выдавать самые разные цифры. От 78 до 224. Склоняюсь к мысли, что у меня Паскаль левый какой-то. В общем я поковырялся в программе и остановился на следующем варианте.
uses crt; Поскольку все ученики без исключения имеют ограничения на имена в 25 символов и должны начинаться сначала строки, то я переделал твою функцию в процедуру. Вроде всё работает Спасибо за помощь Сообщение отредактировано: 4epenOK - -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
Текстовая версия | 19.09.2024 20:37 |