setvbuf无法使stdin无缓冲
我的主要目的是让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
我见过这样的相关职位
在C中读取字符时打印
这是build议替代方法使stdin
无缓冲。 但我很好奇,知道为什么setvbuf
方法不起作用
即使read()
操作接受已经存在的内容,terminal驱动程序也不会返回任何内容。
为了从terminal获取逐个字符的input,必须将其从标准模式转换为原始模式或复制模式,并且这需要不同的操作。 查看“通用terminal接口”上的POSIX手册了解如何控制terminal。 或者考虑使用curses
库。
另请参见: 规范与非规范terminalinput
如果你正在Linux或者其他类Unix系统中尝试这个,terminal会缓冲input并且只传递整行。 你可以使用ncurses来绕过这个:
#include <ncurses.h> int main() { initscr(); getch(); endwin(); return 0; }
编译:
gcc -o main main.c -lncurses