无需按下即可获得单个字符

我试图从用户那里获得单个字符输入而无需用户输入。 我试过这个:

#include  int main() { int input; for (;;) { input = getchar(); printf("%d\n", input); } } 

但是,用户不仅需要按Enter键,还会注册两个按键(输入字符和换行符),即:

 $ ./tests a 97 10 c 99 10 

由于我总是希望用户输入一个字符,并希望将此字符设置为charint ,如何在不等待\n情况下获取字符。

我也试过使用fgets ,但因为我在循环中等待用户输入,所以只是连续执行printf而不会阻塞直到输入。

我的预期输出是:

 a97 b98 ... 

注意:我目前正在使用OSX,但我很满意适用于OSX或Linux的解决方案。

我最近需要完全相同的function,我已通过以下方式实现它:

 #include  char c; system("/bin/stty raw"); c = tolower(getchar()); system("/bin/stty cooked"); 

看看man stty ,我认为它应该适用于Linux和Mac OS X.

编辑:所以你的程序看起来像(你需要添加一个信号处理程序):

 #include  #include  int main() { int input; for (;;) { system("/bin/stty raw"); input = getchar() - '0'; printf("%d\n", input); system("/bin/stty cooked"); } return 0; } 

如果只想在一个命令的末尾按Enter键,则可以使用文件描述符0中的read(2)。

 char buff[1025]; int ret = read(0, buff, 1024); buff[ret] = '\0';