使用getchar立即检索击键

时间:2014-03-19 20:21:16

标签: c getchar

我正在尝试使用getchar()从键盘一次检索1次击键。虽然它这样做,我遇到的问题是不立即发送它,它等待按下回车键然后它从缓冲区一次读取1个字符。

int main(){
    char c = getchar();
    putchar(c);

return 0;
}

如何从键盘上按下每个按键时立即读取? 感谢

2 个答案:

答案 0 :(得分:1)

你必须传入原始模式。 我粘贴你的代码:

http://c.developpez.com/faq/?page=clavier_ecran

#include <termios.h>
#include <unistd.h>

void mode_raw(int activer)
{
static struct termios cooked;
static int raw_actif = 0;

if (raw_actif == activer)
    return;

if (activer)
{
    struct termios raw;

    tcgetattr(STDIN_FILENO, &cooked);

    raw = cooked;
    cfmakeraw(&raw);
    tcsetattr(STDIN_FILENO, TCSANOW, &raw);
}
else
    tcsetattr(STDIN_FILENO, TCSANOW, &cooked);

raw_actif = activer;

}

之后,您无需点击Enter键。

编辑: 像Emmet说的那样,它是Unix版本,它取决于环境。

答案 1 :(得分:1)

您可以使用conio.h中定义的getch()函数

请注意,使用getch()并不会显示控制台上的字符。 如果你想看到你的输入,你可以使用像putch(),putchar(),printf()等函数。

e.g。

#include <conio.h>

int main()
{
     char c = getch();
     putch(c); //isn't necessary for the input, Let's you see your input.
     return 0;
}