Проблемы с машиной тьюринга на с ++

Рейтинг: 0Ответов: 0Опубликовано: 22.09.2014

Здравствуйте.
У меня есть баг в програме: когда нажимаю 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;
}

Ответы

Ответов пока нет.