【发布时间】:2012-05-02 02:52:02
【问题描述】:
我的主要目的是让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
我看过类似的相关帖子
Printing while reading characters in C
建议使用其他方法使stdin 无缓冲。但我很想知道为什么setvbuf 方法不起作用
【问题讨论】:
-
您必须在流上的任何“移动”之前调用
setvbuf()...所以第一件事是main()。 -
@pmg 我更新了我的帖子以反映我的尝试。但是还是不行
-
我认为问题不在于
setvbuf()。我尝试了使用和不使用setvbuf()的程序,但行为不同。如果没有setvbuf(),所有直到并包括 ENTER 的字符都会被消耗(即使它仅在输入 ENTER 后才会被消耗);setvbuf()仅消耗第一个字符,其余字符用作以下 bash 命令。
标签: c buffer stdin getchar unbuffered