¿Cómo se almacena std :: iostream?

Caso de uso general

stoy tratando de implementar un shell básico.

Descripció

Necesito leer la entrada del usuario hasta que se presionen algunos delimitadores para poder realizar una acción correspondiente. Esos delimitadores pueden ser una 'a', una 'b' o una 'c'.

Un ejemplo de entrada se vería así (donde> es el indicador de shell):

> 111-222-333-444a
Ok, '111-222-333-444' entered
¿Por qué quiero un delimitador en línea en lugar del delimitador de 'nueva línea'?

Porque me gustaría escuchar eventos de teclado como 'flecha hacia arriba' para borrar el comando actual e imprimir el último comando (implementando una función de historial).

Porque me gustaría escuchar eventos de teclado como 'tabulación' para completar automáticamente el comando actual (implementando la función de autocompletado).

Lo que tengo hasta ahora

Hasta ahora, mi código se ve así:

bool done = false;
char c;
while (!done && std::cin.get(c))
{   
    switch (c)
    {
    case 'a':
        // Do something corresponding to 'a'
        done = true;
        break;

    case 'b':
        // Do something corresponding to 'b'
        done = true;
        break;

    case 'c':
        // Do something corresponding to 'c'
        done = true;
        break;

    default:
        // buffer input until a delimiter is pressed
        break;
    }
}

Sin embargo, el bucle parece ejecutarse solo después de presionar la tecla 'nueva línea'. Este comportamiento mata la esencia interactiva de la entrada del usuario.

¿Cuál es la pregunta

Sé que std :: ostream está almacenado en búfer, por lo que el contenido no se escribe en el disco hasta que se produjo algún evento, pero ¿qué pasa con std :: istream? ¿Está protegido? En caso afirmativo, ¿cómo es y cuál es mi opción para evitar este comportamiento?

Además, he etiquetado esta pregunta como 'tarea' porque, si no es un ejercicio escolar, es un ejercicio que estoy tratando de hacer solo y no quiero elegir solo una biblioteca que implemente todo esto .

Respuestas a la pregunta(4)

Su respuesta a la pregunta