即使缓冲已关闭,getchar也不会返回

即使缓冲已关闭,getchar也不会返回,c,buffer,C,Buffer,我在Linux 3.12、GCC 4.8的控制台中编译并运行这个简单的程序: #include <stdio.h> main() { setvbuf(stdin, NULL, _IONBF, 0); printf("%c\n", getchar()); } #包括 main(){ setvbuf(标准输入,空,0); printf(“%c\n”,getchar()); } 运行程序并按任意字母,程序不会退出,除非我按enter键 什么在阻止getc

我在Linux 3.12、GCC 4.8的控制台中编译并运行这个简单的程序:

#include <stdio.h>
main() {
        setvbuf(stdin, NULL, _IONBF, 0);
        printf("%c\n", getchar());
}
#包括
main(){
setvbuf(标准输入,空,0);
printf(“%c\n”,getchar());
}
运行程序并按任意字母,程序不会退出,除非我按enter键

什么在阻止getchar()运行?某个地方有隐藏的缓冲区吗?

问题是您的终端正在缓冲输入。直到终端发送并传递接收到的输入,程序才能看到它——默认情况下,直到看到换行符,程序才会传递它

如果您在Linux上运行bash,那么运行
stty-icanon
应该会更改您的终端设置,以便在不需要换行符的情况下直接传递所有输入。

终端正在执行缓冲。直到您按下enter键,终端才会将该行写入前台程序的标准输入

要查看程序执行预期的操作,只需运行
echo'a'./myprog
。它将立即退出并打印单个字符