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

标签 c buffer

我在 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/

相关文章:

c - 为什么它在 'c ' 中打印 null

javascript - Node.js:tcp 连接中的 zlib 压缩

c - 双链表不能正常工作,C

c - 尝试将数组中的数据保存到文件中

c - 找到两个序列的连接点

通过指针改变结构体内容

emacs - 修改缓冲区时如何运行 Emacs Hook ?

java - 为什么在我的 BufferedReader 中使用*更大*的缓冲区时性能会*差*?

javascript - 如何在javascript中制作声音文件?

c - 打印一个字符数组,但不希望结尾