无法使用_getch和Switch Case在C ++中使用togeather

时间:2018-03-11 00:57:21

标签: c++ getch

我对C ++很陌生,而且我很难用一点""游戏""我正在制作。

在这里,我尝试创建一种菜单,您可以使用箭头键作为输入进行移动,并使用Enter键确认,但尽管编译器中没有出现任何错误,程序只会自动关闭。我到达了第二个Switch Case。

我做错了什么?感谢

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <string>
#include <windows.h>
#include <conio.h>


#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
#define ENTER 13



using namespace std;


int main()
{
    struct Stats {
        int Hp;
    int Atk;
    int Speed;
    int Defense;
};

struct Defense {
    bool IsWeakFire;
    bool IsWeakIce;
    bool IsWeakWind;
    bool IsWeakElectric;
    bool IsWeakLight;
    bool IsWeakDark;
};


struct CharacterStats {
    string Name;
    string Desc;
    string Persona;
    Stats Stats;
    Defense Defense;
}Characters[4];


//Program Start

cout << "You are now playng: ProjectPB \n" << endl <<
        "MC Name> ";

cin >> Characters[0].Name;

cout << "\n \n The game will now start.";
for (int i=0;i<4;i++)
{
    Sleep(500);
    cout << ".";
}

system("cls");


//Fight start




int i = 0;
int sel = 1;
int c = 0;

while (i == 0) {
    switch (sel)
    {
    case 1:
        system("cls");
        cout << " |ATTACK|      PERSONA         DEFEND" << endl;
        system("pause");
        break;

    case 2:
        system("cls");
        cout << "  ATTACK       |PERSONA|       DEFEND" << endl;
        system("pause");
        break;

    case 3:
        system("cls");
        cout << "  ATTACK       PERSONA        |DEFEND|" << endl;
        system("pause");
    }       break;

    Sleep(100);


int i = 0;
int sel = 1;


    while (i == 0){
        switch (sel)
        {
        case 1:
            system("cls");
            cout << " |ATTACK|      PERSONA         DEFEND" << endl;
            system("pause");
            break;

        case 2:
            system("cls");
            cout << "  ATTACK       |PERSONA|       DEFEND" << endl;
            system("pause");
            break;

        case 3:
            system("cls");
            cout << "  ATTACK       PERSONA        |DEFEND|" << endl;
            system("pause");
        }       break;

        Sleep(100);





        int c = _getch();
        switch (c)
        {
        case KEY_LEFT :
            sel--;
            if (sel <= 0)
            {
                sel = 3;
            }
            break;

        case KEY_RIGHT :
                sel++;
                if (sel > 3)
                {
                    sel = 1;
                }
                break;


        case ENTER:
                    i = 1;
                    break;
        }



    }







}



return 0;
}

1 个答案:

答案 0 :(得分:0)

这必须是因为在此声明中非空输入缓冲区

  

int c = _getch();

要解决此问题,只需在getch()

之前使用此权限清除缓冲区
  

while((getchar())!=&#39; \ n&#39;);