2
我在終端上做了一個簡單的2D遊戲,我一直想知道如何得到stdin而不必返回。因此,用戶不必按w \ n(\ n返回),他們只需按'w'即可前進。 scanf,gets和getchar不能做到這一點,但我已經看到它在諸如Vi之類的程序中完成。我將如何實現這一目標?在沒有 n的情況下捕獲輸入 n
我在終端上做了一個簡單的2D遊戲,我一直想知道如何得到stdin而不必返回。因此,用戶不必按w \ n(\ n返回),他們只需按'w'即可前進。 scanf,gets和getchar不能做到這一點,但我已經看到它在諸如Vi之類的程序中完成。我將如何實現這一目標?在沒有 n的情況下捕獲輸入 n
您需要將終端設置爲非規範模式。您可以使用像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.
我要去尋找到這一點,但是這看起來像一個好辦法做到這一點。 – user1150512 2012-04-14 09:30:19