我正在尝试从用户那里获得单个字符输入而无需用户输入。我试过这个:
#include <stdio.h>
int main() {
int input;
for (;;) {
input = getchar();
printf("%d\n", input);
}
}
但是,用户不仅需要按Enter键,还会注册两个按键(输入字符和换行符),即:
$ ./tests
a
97
10
c
99
10
由于我总是希望用户输入一个字符,并希望将此字符设为char
或int
,如何在不等待\n
的情况下获取该字符}。
我也尝试过使用fgets
,但因为我在循环中等待用户输入,所以只是连续执行printf
而不会阻塞直到输入。
我的预期输出是:
a97
b98
...
注意:我目前正在使用OSX,但我对适用于OSX或Linux的解决方案感到满意。
答案 0 :(得分:2)
我最近需要完全相同的功能,并且我已通过以下方式实现它:
#include <stdlib.h>
char c;
system("/bin/stty raw");
c = tolower(getchar());
system("/bin/stty cooked");
关注man stty,我认为它应该适用于Linux和Mac OS X.
编辑:所以你的程序看起来像(你需要为它添加一个信号处理程序):
#include <stdlib.h>
#include <stdio.h>
int main() {
int input;
for (;;) {
system("/bin/stty raw");
input = getchar() - '0';
printf("%d\n", input);
system("/bin/stty cooked");
}
return 0;
}
答案 1 :(得分:0)
如果您只想在一个命令的末尾按Enter键,则可以使用 从文件描述符0中读取(2)。
char buff[1025];
int ret = read(0, buff, 1024);
buff[ret] = '\0';