あなたがする必要があるのは、文字が getch() 関数で利用可能かどうかを確認することです。遅延なしモードで使用すると、メソッドはブロックされません。次に、「\ n」に遭遇するまで文字を使い果たし、各文字を結果の文字列に追加する必要があります。
または、私が使用する方法は、GNU readline ライブラリを使用することです。非ブロッキング動作をサポートしていますが、そのセクションに関するドキュメントはそれほど優れていません。
ここに含まれているのは、使用できる小さな例です。選択ループがあり、GNU readline ライブラリを使用します。
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <stdlib.h>
#include <stdbool.h>
int quit = false;
void rl_cb(char* line)
{
if (NULL==line) {
quit = true;
return;
}
if(strlen(line) > 0) add_history(line);
printf("You typed:\n%s\n", line);
free(line);
}
int main()
{
struct timeval to;
const char *prompt = "# ";
rl_callback_handler_install(prompt, (rl_vcpfunc_t*) &rl_cb);
to.tv_sec = 0;
to.tv_usec = 10000;
while(1){
if (quit) break;
select(1, NULL, NULL, NULL, &to);
rl_callback_read_char();
};
rl_callback_handler_remove();
return 0;
}
コンパイル:
gcc -Wall rl.c -lreadline