I'm kinda new to C++ and I'm having an hard time with a little ""game"" I'm making.
Here I'm tryng to create a sort of menu that you can move through using the Arrow keys as inputs, and confirm using the Enter key, but despite not getting any error in the compiler the program just closes itself when I reach the second Switch Case.
What am I doing wrong? Thanks
#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;
}
This must be because of the non-empty input buffer during this statement
int c = _getch();
To solve this,simply clear the buffer with this right before getch()
while ((getchar()) != '\n');