La biblioteca de línea de lectura GNU es excelente si desea funciones completas de edición de línea e historial, pero si basta con un simple aviso (o si no desea la licencia GNU), puede hacerlo solo con la biblioteca estándar:
#include <iostream>
#include <string>
void process(std::string const & line);
int main()
{
for (std::string line; std::cout << "APP > " && std::getline(std::cin, line); )
{
if (!line.empty()) { process(line); }
}
std::cout << "Goodbye.\n";
}
Recomiendo la biblioteca GNU readline para esto. Se ocupa del tedioso trabajo de obtener líneas de entrada y permite al usuario editar su línea con retroceso, flechas izquierda y derecha, etc., y recuperar comandos anteriores usando la flecha hacia arriba e incluso buscar comandos antiguos usando ^R, etc. Readline viene instalado con distribuciones típicas de Unix como Linux, pero si no lo tiene, puede encontrarlo aquí.
Editar:aquí hay un ejemplo mínimo de línea de lectura:
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
int main(int argc, char ** argv)
{
while(1)
{
char * line = readline("> ");
if(!line) break;
if(*line) add_history(line);
/* Do something with the line here */
free(line);
}
}