无法让 getch 和 Switch Case 在 C++ 中协同工作

Can't get _getch and Switch Case to work togeather in C++

我是 C++ 的新手,我在制作一些“"game"”时遇到了困难。

我在这里尝试创建一种菜单,您可以使用箭头键作为输入来移动它,并使用 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;
}

这一定是因为 non-empty 语句中的输入缓冲区

int c = _getch();

要解决这个问题,只需在 getch() 之前用这个清除缓冲区

while ((getchar()) != '\n');