我的主要目的是让getchar
在获得一个字符后立即返回,而不是等待 ENTER 键。我试过这个
int main()
{
setvbuf(stdin,NULL,_IONBF,0);
getchar();
return 0;
}
将其与setvbuf
setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
应将stdin
设置为无缓冲模式。
但getchar()
仍在等待 ENTER
我见过这样的相关帖子
Printing while reading characters in C
建议使stdin
无缓冲的替代方法。但我很想知道为什么setvbuf
方法不起作用
答案 0 :(得分:20)
即使read()
操作接受已存在的操作,终端驱动程序也不会返回任何内容,直到您返回为止。
要从终端获取逐个字符的输入,您必须将其从规范模式转换为原始模式或cbreak模式,这需要完全不同的操作。有关如何控制终端,请查看'General Terminal Interface'上的POSIX手册。或者考虑使用curses
库。
答案 1 :(得分:1)
如果您在Linux或其他类Unix系统中尝试此操作,则它是缓冲输入并仅传递整行的终端。您可以使用ncurses来规避这个:
#include <ncurses.h>
int main()
{
initscr();
getch();
endwin();
return 0;
}
编译:
gcc -o main main.c -lncurses