gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:40 24 4
gpt4 key购买 nike

我是 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;
}

最佳答案

这一定是因为这条语句中的非空输入缓冲区

int c = _getch();

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

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

关于c++ - 无法让 getch 和 Switch Case 在 C++ 中协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com