これにはGNU readline ライブラリをお勧めします。入力の行を取得するという面倒な作業を処理し、ユーザーがバックスペース、左右の矢印などを使用して行を編集したり、上矢印を使用して古いコマンドを呼び出したり、^R を使用して古いコマンドを検索したりできるようにします。など。Readline は、Linux などの典型的な UNIX ライクなディストリビューションにインストールされていますが、持っていない場合は、ここで見つけることができます。
編集: これは最小限の readline の例です:
#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 */
}
}
gcc -o test test.c -lreadline -lncurses でコンパイルします。
readline を使用できない場合は、代わりに getline を使用できます。
#include <stdio.h>
int main()
{
char * line = NULL;
size_t len;
while(getline(&line, &len, stdin) >= 0)
printf("I got: %s", line);
}
getline でさえ受け入れられない場合は、fgets を使用できます。適切なサイズのバッファーを動的に割り当てないため、長すぎる行は切り捨てられます。しかし、少なくともそれは標準の C です:
#include <stdio.h>
int main()
{
char buf[1000];
while(fgets(buf, sizeof(buf), stdin)
printf("I got: %s, line);
}