在没有\ n的情况下捕获输入

时间:2012-04-14 09:06:40

标签: c input terminal

我正在终端制作一个简单的2D游戏,我一直想知道如何在不必返回的情况下获得stdin。因此,不是用户必须按下w \ n(\ n返回),他们只需按'w'即可前进。 scanf,gets和getchar不能这样做,但我已经看到它在Vi之类的程序中完成了。我怎么做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要将终端设置为非规范模式。您可以使用tcsetattr和tcgetattr等函数来设置和获取终端属性。这是一个简单的例子:

int main(int argc, const char *argv[])
{
    struct termios old, new;
    if (tcgetattr(fileno(stdin), &old) != 0) // get terminal attributes
        return 1;

    new = old;
    new.c_lflag &= ~ICANON; // turn off canonical bit.
    if (tcsetattr(fileno(stdin), TCSAFLUSH, &new) != 0) // set terminal attributes
        return 1;

    // at this point, you can read terminal without user needing to
    // press return

    tcsetattr(fileno(stdin), TCSAFLUSH, &old); // restore terminal when you are done.

    return 0;
}

有关这些功能的详情,请参阅glibc documentation.特别是this part.