2

ターミナルで単純な 2D ゲームを作成していますが、戻ることなく stdin を取得するにはどうすればよいか疑問に思っていました。したがって、ユーザーは w\n (戻るには \n) を押す必要はなく、単に 'w' を押すだけで前に進みます。scanf、gets、および getchar はこれを実行できませんが、Vi などのプログラムで以前に実行されているのを見たことがあります。どうすればこれを達成できますか?

4

1 に答える 1

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のドキュメントを参照してください。特にこの部分。

于 2012-04-14T09:25:47.167 に答える