获得单个角色而不按Enter键

时间:2015-09-25 12:11:11

标签: c input character fgets getchar

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

#include <stdio.h>

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的解决方案感到满意。

2 个答案:

答案 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';