Программа не реагирует на Enter - Free Pascal

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

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

Листинг программы
  1. unit nice_menu;
  2. INTERFACE
  3. type
  4. TMenuItem = record
  5. name: string;
  6. submenu: array of string;
  7. end;
  8. TMenu = array of TMenuItem;
  9. procedure ShowMenu(var menu: TMenu; var item, subitem: integer);
  10. procedure ReadMenu(var menu: TMenu; var f: text);
  11. procedure AlignMenu(var menu: TMenu);
  12. IMPLEMENTATION
  13. uses crt;
  14. //----------------------------------------------------------------
  15. procedure ShowMenu(var menu: TMenu; var item, subitem: integer);
  16. var
  17. i, j, x: integer;
  18. ch: char;
  19. begin
  20. item := 0;
  21. subitem := -1;
  22. repeat
  23. textbackground(black);
  24. clrscr;
  25. textbackground(blue);
  26. textcolor(white);
  27. for i := 0 to high(menu) do
  28. if i = item then
  29. begin
  30. textbackground(white);
  31. textcolor(blue);
  32. x := whereX;
  33. write(menu[i].name, ' ');
  34. textbackground(blue);
  35. textcolor(white);
  36. if subitem >= 0 then
  37. for j := 0 to high(menu[i].submenu) do
  38. begin
  39. gotoxy(x, 2+j);
  40. if j = subitem then
  41. begin
  42. textbackground(white);
  43. textcolor(blue);
  44. write(menu[i].submenu[j]);
  45. textbackground(blue);
  46. textcolor(white);
  47. end
  48. else
  49. write(menu[i].submenu[j]);
  50. end;
  51. end
  52. else
  53. write(menu[i].name, ' ');
  54. ch := readkey;
  55. if ch <> #0 then
  56. continue;
  57. case readkey of
  58. #13:
  59. if subitem >= 0 then
  60. exit
  61. else
  62. subitem := 0;
  63. #77:
  64. begin
  65. item := (item + 1) mod length(menu);
  66. if subitem >= 0 then
  67. subitem := 0;
  68. end;
  69. #75:
  70. begin
  71. item := (length(menu) + item - 1) mod length(menu);
  72. if subitem >= 0 then
  73. subitem := 0;
  74. end;
  75. #80:
  76. if subitem >= 0 then
  77. subitem := (subitem + 1) mod length(menu[item].submenu);
  78. #72:
  79. if subitem >= 0 then
  80. subitem := (length(menu[item].submenu) + subitem - 1) mod length(menu[item].submenu);
  81. #27:
  82. subitem := -1;
  83. end;
  84. until false;
  85. end;
  86. //----------------------------------------------------------------
  87. procedure ReadMenu(var menu: TMenu; var f: text);
  88. var
  89. i, j, menulen, sublen: integer;
  90. begin
  91. readln(f, menulen);
  92. setlength(menu, menulen);
  93. for i := 0 to high(menu) do
  94. with menu[i] do
  95. begin
  96. readln(f, name);
  97. readln(f, sublen);
  98. setlength(submenu, sublen);
  99. for j := 0 to high(submenu) do
  100. readln(f, submenu[j]);
  101. end;
  102. end;
  103. //----------------------------------------------------------------
  104. procedure AlignMenu(var menu: TMenu);
  105. var
  106. i, j, maxlen: integer;
  107. begin
  108. for i := 0 to high(menu) do
  109. with menu[i] do
  110. begin
  111. maxlen := 0;
  112. for j := 0 to high(submenu) do
  113. if length(submenu[j]) > maxlen then
  114. maxlen := length(submenu[j]);
  115. for j := 0 to high(submenu) do
  116. begin
  117. while length(submenu[j]) < maxlen do
  118. submenu[j] := submenu[j] + ' ';
  119. submenu[j] := ' ' + submenu[j] + ' ';
  120. end;
  121. end;
  122. end;
  123. //----------------------------------------------------------------
  124. begin end.
Кроме Enter-а на все реакция идет (см. со строки 65). А при нажатии на Enter ничего не происходит как будто на что-то другое нажали. В чем ошибка?

Решение задачи: «Программа не реагирует на Enter»

textual
Листинг программы
  1. ch := readkey;
  2.     if ch = #0 then ch := readkey;
  3.     case readkey of
  4.     #13:

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

  1. Сначала программа ожидает нажатия клавиши.
  2. Если нажата клавиша Enter (которая имеет ASCII-код 13), то выполняется блок кода, который начинается с case 13.
  3. В этом блоке кода программа не делает ничего, так как его единственная цель - просто обработать нажатие клавиши Enter.

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


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

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

10   голосов , оценка 4.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы