Search code examples
c++getch

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


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

Solution

  • 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');