我需要检测按键,但不需要用户按下回车键。最优雅的方法是什么?
例如,如果用户按下字母 Q,而不按下 enter,程序会执行某些操作。
#include <termios.h>
#include <unistd.h>
:
struct termios attr;
tcgetattr(0, &attr);
attr.c_lflag &= ~ICANON;
tcsetattr(0, TCSANOW, &attr);
<conio.h>
提供了函数_getch(void)
,可以用于读取按键而不会回显它们(如果需要,可以自己打印)。#include <conio.h>
#include <stdio.h>
int main( void )
{
int ch;
puts( "Type '@' to exit : " );
do
{
ch = _getch();
_putch( ch );
} while( ch != '@' );
_putch( '\r' ); // Carriage return
_putch( '\n' ); // Line feed
}
#include <stdio.h>
,我想。 - alternative据我所知,除了使用像 ncurses
这样的库提供的 getch(void)
函数之外,没有好的可移植方法来实现这一点。
注意:从 stdio.h
中调用的 getchar(void)
函数似乎会等待直到按下回车键,然后再将字符传递给您,因此它无法起作用。
getchar
,而不是 ncurses
函数 getch
。如果他仔细阅读 ncurses 和 raw mode,getch
就可以正常工作,但 getchar
不行。 - alternative
setvbuf
和fcntl
的组合来实现这一点后,我现在很想去阅读ncurses源代码了... - dmckee --- ex-moderator kitten