wabepper wabepper - 4 months ago 29
C Question

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!

Answer

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