我在 Linux 3.12、GCC 4.8 的控制台中编译并运行这个简单的程序:
#include <stdio.h>
main() {
setvbuf(stdin, NULL, _IONBF, 0);
printf("%c\n", getchar());
}
运行程序并按任意字母,除非按回车键,否则程序不会退出。
是什么阻止 getchar() 运行?某处是否有隐藏的缓冲区?
最佳答案
问题是您的终端正在缓冲输入。在您的终端发送传递它接收到的输入之前,您的程序无法看到它 - 并且默认情况下,它不会传递它,直到它看到换行符。
如果您在 Linux 上运行 bash,则运行 stty -icanon
应更改终端设置以直接传递所有输入,而不需要换行符。
关于c - 即使关闭缓冲,getchar 也不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810330/