Hola,
Como dijo
RayR, puedes utilizar _getch o getche.
Antes de querer implementar algo de otra forma, tienes que saber para que sirve ese algo en primer lugar.
Tienes que presionar [ENTER] cuando llamas a la funcion getchar() (o el equivalente en C++, cin) para determinar CUANDO acaba la cadena de caracteres, porque se supone de antemano que la cadena, por logica, empieza en cuanto presionas una tecla.
puntos clave:
La cadena empieza cuando presionas una tecla.
La cadena termina cuando presionas [ENTER].
La funcion _getch, lo que hace es leer el estado del teclado actual. Es decir, no ESPERA, sino que LEE, el estado actual.
Es como si le hiciera un snapshot a todas las teclas.
En fin, el punto es que _getch es inutil si no determinas CUANDO has presionado una tecla.
Porque de nada sirve que ejecutes el programa e inmediatamente llames a _getch, porque probablemente no estaras presionando nada (O si. El problema es que no lo sabes).
Entonces, ¿Como llamar a _getch?
Haciendo uso de la funcion kbhit()
kbhit retorna 1 cuando alguna tecla del teclado esta siendo presionada actualmente, y retorna 0 cuando ninguna tecla del teclado esta siendo presionada actualmente.
Es decir, para esperar a que una tecla sea presionada, haces:
while(!kbhit());
El ciclo va a terminar inmediatamente cuando se presione una tecla. Es entonces cuando llamas a _getch para que rapidamente tome un snapshot del teclado, y retorne la tecla que esta siendo presionada actualmente:
while(!kbhit());
key=_getch();
Puedes probar el funcionamiento con este codigo:
#include <stdio.h>
#include <conio.h>
int main()
{
int key;
while(!kbhit());
key=_getch();
key);
return 0;
}
IMPORTANTE: Te recomiendo que juegues con ese ultimo codigo. Quita el while(...); para que veas lo que sucede.
PD: Vi que esto lo estas implementando el Windows. Para que sepas, no se si te importa la portabilidad pero en Linux, ademas de que no se si funcione, seria mejor implementarlo con la libreria ncurses.
Un saludo.