我在Linux 3.12,GCC 4.8的控制台中编译并运行这个简单的程序:
#include <stdio.h>
main() {
setvbuf(stdin, NULL, _IONBF, 0);
printf("%c\n", getchar());
}
运行程序并按任意字母,程序不会退出,除非我按下回车键。
什么阻止getchar()运作?某处有隐藏的缓冲区吗?
答案 0 :(得分:2)
问题是您的终端正在缓冲输入。在您的终端发送通过其收到的输入之前,您的程序无法看到它 - 并且默认情况下,它不会通过它直到它看到换行符。
如果您在Linux上运行bash,则运行stty -icanon
应更改终端设置以直接传递所有输入,而无需换行。
答案 1 :(得分:0)
终端正在执行缓冲。终端实际上不会将该行写入前台程序的标准输入,直到您按Enter键。
要查看该计划是否符合您的期望,您只需运行echo 'a' | ./myprog
即可。它将立即退出并打印单个字符。