That's because getche (which I haven't seen used in a very, very long time, how old are your learning materials?) returns the ASCII code for the character typed. The ASCII code of '2' is 50, so your program works (well works as expected anyway, which isn't what you want).
A few things:
1) You can only enter single digits if you do it like that. You can convert a single digit entry ASCII character to decimal like this
char ch = getche(); // getche() might return an int instead of a char, I dunno. It still returns the ASCII value though
int charAsInt = ch - '0';
EDIT: Don't do that though. You have to manually convert a stream of digits to an int to cope with multiple digits, which isn't hard but not worth doing, since you should just let the user type in a complete expression and extract the operands and operator from the complete expression (see end of post).
2) You don't do any error checking, so the above method won't work if you don't enter a single digit number, or an invalid operator.
What you should be doing is allowing the user to enter a line of text, extract the operands and the operator by parsing the text line (and handle errors etc., including dividing by zero), and output the result. Use getline to read the text into a string then use a stringstream to extract the operands and operator from the string.
You posted a thread about this the other month anyway...
"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley