I recommend the GNU readline library for this. It takes care of the tedious work of getting lines of input, and allows the user to edit his line with backspace, left and right arrows, etc, and to recall older command using the up arrow and even search for older command using ^R, etc. Readline comes installed with typical unix-like distributions like linux, but if you don't have it, you can find it here
Edit: Here is a minimal readline example:
#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 */
}
}
Compile with gcc -o test test.c -lreadline -lncurses.
If you can't use readline, getline is an alternative:
#include <stdio.h>
int main()
{
char * line = NULL;
size_t len;
while(getline(&line, &len, stdin) >= 0)
printf("I got: %s", line);
}
If even getline is unacceptable, you can use fgets. It will not dynamically allocate a buffer of suitable size, so too long lines will be truncated. But at least it is standard C:
#include <stdio.h>
int main()
{
char buf[1000];
while(fgets(buf, sizeof(buf), stdin)
printf("I got: %s, line);
}