Search code examples
ccharacterdecimalarrow-keysgetch

getch and arrow codes


I'm writing a programm that's using getch() to scan for arrow keys. My code so far is:

switch(getch()) {
    case 65:    // key up
        break;
    case 66:    // key down
        break;
    case 67:    // key right
        break;
    case 68:    // key left
        break;
}

Problem is that when I press 'A', 'B', 'C' or 'D' the code will also executed, because 65 is the decimal code for 'A', etc...

Is there a way to check for an arrow key without call others?

Thanks!


Solution

  • By pressing one arrow key getch will push three values into the buffer:

    • '\033'
    • '['
    • 'A', 'B', 'C' or 'D'

    So the code will be something like this:

    if (getch() == '\033') { // if the first value is esc
        getch(); // skip the [
        switch(getch()) { // the real value
            case 'A':
                // code for arrow up
                break;
            case 'B':
                // code for arrow down
                break;
            case 'C':
                // code for arrow right
                break;
            case 'D':
                // code for arrow left
                break;
        }
    }