Un programa que se ejecuta en un terminal de texto/consola puede manipular el texto que se muestra en su consola de diversas maneras (escribir en negrita, mover el cursor, la pantalla clara, etc.). Esto se logra imprimiendo secuencias de caracteres especiales, llamadas "escape sequences" (porque generalmente comienzan con Escape, ASCII 27).
Si stdout va a un terminal que comprende estas secuencias de escape, la pantalla del terminal cambiará en consecuencia.
Si redirige la salida estándar a un archivo, las secuencias de escape aparecerán en el archivo (que por lo general no es lo que quiere).
no existe un estándar completo para secuencias de escape, pero la mayoría de los terminales utilizan las secuencias introducidas por VT100, con muchas extensiones. Esto es lo que entienden la mayoría de los terminales en Unix/Linux (xterm, rxvt, konsole) y otros como PuTTY.
En la práctica, no codificaría directamente secuencias de escape en su software (aunque podría), pero use una biblioteca para imprimirlas, como ncurses o GNU readline mencionadas anteriormente. Esto permite la compatibilidad con diferentes tipos de terminales.
Es posible que desee agregar un #include para la función de suspensión. –
Prairiedogg