Readkey без ожидания - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Бодрого времени суток, господа. Возникла такая ситуация. Вот (сильно упрощенный) код: есть такое меню в процедуре MyMenu:
menu[1]:=' Начать снова ';
menu[2]:=' Загрузить данные ';
menu[3]:=' Сохранить данные ';
menu[4]:=' Сохранить и выйти  ';
menu[5]:=' Просто выйти ';
и нужно, чтобы его можно было вызывать по необходимости с помощью Esc. Я это сделал это так:
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);

Объяснение кода листинга программы

  1. writeln('Для вызова меню нажмите Esc'); - вывод сообщения о том, что для вызова меню необходимо нажать клавишу Esc
  2. ch:=readkey; - считывание нажатой клавиши и присвоение ее значения переменной ch
  3. if ch=#27 then - проверка, была ли нажата клавиша Esc
  4. MyMenu; - вызов процедуры с меню
  5. writeln('Введите данные'); - вывод сообщения о необходимости ввода данных
  6. writeln('--------------------------------'); - добавление разделителей для ввода данных
  7. write('Расход топлива, кг       : '); - вывод сообщения о необходимом вводе расхода топлива
  8. readln(dm); - считывание введенного значения расхода топлива и присвоение его переменной dm
  9. write('Время маневра, сек       : '); - вывод сообщения о необходимом вводе времени маневра
  10. readln(dt); - считывание введенного значения времени маневра и присвоение его переменной dt

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы