Проблемы с машиной тьюринга на с ++
Здравствуйте.
У меня есть баг в програме: когда нажимаю esc (хочу выйти из 1 меню "машина тьюринга"), оно кидает на 3 пункт меню и запускает его. Это первая проблема, а вторая то, что когда захожу в машину тьюринга, не показывает каретку. Только после движения стрелки влево или вправо. (Прога еще не до конца доделана.)
Вот код:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int iItem = 1;
int nLast = 3;
void ShowMenu(int iItem)
{
system("cls");
printf(" Меню\n" );
printf("%s1 - машина тьюринга\n",iItem == 1 ? ">" : " ");
printf("%s2 - инструкция\n" ,iItem == 2 ? ">" : " ");
printf("%s3 - выход\n" ,iItem == 3 ? ">" : " ");
}
int main()
{
COORD position;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
position.X = 3;
position.Y = 1;
int key=0;
setlocale(LC_ALL,"Ukr");
char m='Y';
int end=1000;
int j,i,kursor; int n=17,k=15;
string MP[n]; string K[k];
for(int k= 0;k<17;k++)
K[k]=" ";
for(int i= 0;i<17;i++)
MP[i]="0";
MP[0]="X";
MP[1]="“";
MP[2]="#";
MP[3]="$";
MP[4]="%";
MP[5]="&";
MP[6]="'";
MP[7]="(";
MP[8]=")";
MP[9]="*";
MP[10]="+";
MP[11]=",";
MP[12]="-";
MP[13]=".";
MP[14]="/";
MP[15]="0";
MP[16]="X";
int s=2;
mitkaM2:
ShowMenu(iItem);
while(TRUE)
{
if(GetAsyncKeyState(VK_UP))
{
keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
if(0 < iItem - 1)
iItem = iItem - 1;
else
iItem = nLast;
ShowMenu(iItem);
}
if(GetAsyncKeyState(VK_DOWN))
{
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
if(iItem < nLast)
iItem = iItem + 1;
else
iItem = 1;
ShowMenu(iItem);
}
if(GetAsyncKeyState(VK_RETURN))
{
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
ShowMenu(iItem);
switch(iItem)
{
case 1:
goto mitkaZ1;
break;
case 2:
printf("Run 2-nd item of menu\n");
break;
case 3:
printf("Run 3-nd item of menu\n");
break;
}
}
}
mitkaZ1: key=0;
while(key!=27)
{
system("cls");
for(int i= 0;i<17;i++)
cout<<"|"<<MP[i];
cout<<"|\n";
cout<<" "<<" ";
for(int k=0;k<15;k++)
cout<<"|"<<K[k];
cout<<"|"<<endl;
key=getch();
if(key == 77)
{ position.X = position.X + 2;
if(position.X<=31) {
SetConsoleCursorPosition(hConsole, position);
puts("Y");
//cout<<endl<<position.X;
//cout<<endl<<position.X-2;
s++;
} else { cout<<endl<<"ошибка"; position.X = position.X - 2;}
key=getch();
}
if(key == 75)
{ position.X = position.X - 2;
if(position.X>=3) {
SetConsoleCursorPosition(hConsole, position);
puts("Y");
//cout<<endl<<position.X;
//cout<<endl<<position.X-2;
s--;
}else{ cout<<endl<<"ошибка"; position.X = position.X + 2;}
key=getch();
}
if(key == 90)
{
cout<<endl<<"на какой символ вы хотите изменить -> ";
char a;
cin>>a;
MP[position.X-s]=a;
}
if(key==27) goto mitkaM2;
}
return 0;
}
Источник: Stack Overflow на русском