C 正在捕获输入而不使用\n

C 正在捕获输入而不使用\n,c,input,terminal,C,Input,Terminal,我正在终端上做一个简单的2d游戏,我一直在想我怎么能不用回来就可以得到stdin。因此,用户不必按w\n(\n表示返回),而只需按“w”即可前进。 scanf、gets和getchar无法做到这一点,但我以前在Vi等程序中见过这样的操作。我如何实现这一点?您需要将终端设置为非规范模式。您可以使用诸如tcsetattr和tcgetattr之类的函数来设置和获取终端属性。以下是一个简单的例子: int main(int argc, const char *argv[]) { struct t

我正在终端上做一个简单的2d游戏,我一直在想我怎么能不用回来就可以得到stdin。因此,用户不必按w\n(\n表示返回),而只需按“w”即可前进。
scanf、gets和getchar无法做到这一点,但我以前在Vi等程序中见过这样的操作。我如何实现这一点?

您需要将终端设置为非规范模式。您可以使用诸如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;
}

有关这些函数的更多信息,请参阅,特别是我将对此进行研究,但这似乎是一个很好的方法。