Readkey без ожидания - Free Pascal
Формулировка задачи:
Бодрого времени суток, господа.
Возникла такая ситуация. Вот (сильно упрощенный) код:
есть такое меню в процедуре MyMenu:
и нужно, чтобы его можно было вызывать по необходимости с помощью Esc.
Я это сделал это так:
И все бы хорошо, но программа стоит на одном месте и ждет нажатия на какую-нибудь клавишу.
Вопрос - можно ли это реализовать как-то, чтобы не было этого ожидания. Вполне возможно я думаю совершенно не в ту сторону и это реализуется абсолютно по-другому.
menu[1]:=' Начать снова '; menu[2]:=' Загрузить данные '; menu[3]:=' Сохранить данные '; menu[4]:=' Сохранить и выйти '; menu[5]:=' Просто выйти ';
writeln('Для вызова меню нажмите Esc'); ch:=readkey; // считываем нажатие Esc if ch=#27 then // если нажали MyMenu; // вызываем процедуру с меню writeln('Введите данные'); writeln('--------------------------------'); write('Расход топлива, кг : '); readln(dm); write('Время маневра, сек : '); readln(dt);
Решение задачи: «Readkey без ожидания»
textual
Листинг программы
writeln('Для вызова меню нажмите Esc'); ch:=readkey; // считываем нажатие Esc if ch=#27 then // если нажали MyMenu; // вызываем процедуру с меню {И вот тут программа тупо ждет нажатия какой-либо клавиши. Затем продолжает:} writeln('Введите данные'); writeln('--------------------------------'); write('Расход топлива, кг : '); readln(dm); write('Время маневра, сек : '); readln(dt);
Объяснение кода листинга программы
writeln('Для вызова меню нажмите Esc');
- вывод сообщения о том, что для вызова меню необходимо нажать клавишу Escch:=readkey;
- считывание нажатой клавиши и присвоение ее значения переменнойch
if ch=#27 then
- проверка, была ли нажата клавиша EscMyMenu;
- вызов процедуры с менюwriteln('Введите данные');
- вывод сообщения о необходимости ввода данныхwriteln('--------------------------------');
- добавление разделителей для ввода данныхwrite('Расход топлива, кг : ');
- вывод сообщения о необходимом вводе расхода топливаreadln(dm);
- считывание введенного значения расхода топлива и присвоение его переменнойdm
write('Время маневра, сек : ');
- вывод сообщения о необходимом вводе времени маневраreadln(dt);
- считывание введенного значения времени маневра и присвоение его переменнойdt
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д