无法_getch和切换案例以在C++工作 togeather

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

本文关键字:C++ 工作 togeather 案例 getch 无法      更新时间:2023-10-16

我对C++有点陌生,我很难做一个小"游戏"。

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

我做错了什么?谢谢

#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;
}

这一定是因为在此语句期间输入缓冲区为非空

int c = _getch((;

要解决此问题,只需在 getch(( 之前清除缓冲区

while ((

getchar((( != ''(;