c语言setbuf函数怎么用啊

#include<stdio.h>voidmain(){intc;staticcharbuf[BUFSIZ];setbuf(stdout,buf);while((c=ge... #include<stdio.h>
void main()
{
int c;
static char buf[BUFSIZ];
setbuf(stdout,buf);
while((c=getchar()) != EOF)
putchar(c);
fflush(stdout);
}
输入字符怎么没有输出啊
展开
 我来答
splashchaos
2013-07-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3342
采纳率:0%
帮助的人:3660万
展开全部

你的程序流程是这样的:


while((c=getchar()) != EOF)
  putchar(c);

这个是一个循环,会要求你不停输入,直到你键入ctr-z(Windows上,如果是xNix则是Ctr-D),这个循环才会终止;

② 上面的循环终止后,你最后一次输入的字符,才会被输出到stdout(这里即是屏幕)上面。


因此如果你希望每键入一个字符就立刻回显到屏幕上,你应该:

   while((c=getchar())!= EOF)
    {
        putchar(c);
        fflush(stdout);
    }
更多追问追答
追问
#include
void main()
{
int c;
static char buf[2];
setbuf(stdout,buf);
while((c=getchar()) != EOF)
{

putchar(c);
//fflush(stdout);
}

}
如果这样改一下的话,连续输入三个字符不加ctr-z为什么不在屏幕上显式呢?
追答
连续输入3个字符,也还是没有退出那个while循环;而且由于使用了setbuf,所以putchar没有将getchar得到的字符输出到屏幕,而是输出到了由setbuf设置的缓冲区,必须ffush才可以把缓冲区buf里面的内容全部输出。
tattackor
2015-10-26 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:885万
展开全部

1、函数名: setbuf
功 能: 把缓冲区与流相联
用 法: void setbuf(FILE *steam, char *buf);[1]
说明:setbuf函数具有打开和关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h头文件中)的缓冲区。通常在此之后该流就是全缓冲的,但是如果该流与一个终端设备相关,那么某些系统也可以将其设置为行缓冲。为了关闭缓冲,可以将buf参数设置为NULL。

2、例程;

#include <stdio.h>
char outbuf[50];
int main(void)
{
/* 将outbuf与stdout输出流相连接 */
setbuf(stdout,outbuf);
/* 向stdout中放入一些字符串 */
puts("This is a test of buffered output.");
puts("This output will go into outbuf");
puts("and won't appear until the buffer");
puts("fills up or we flush the stream.\n");
/* 以下是outbuf中的内容 */
puts(outbuf);
/*刷新流*/
fflush(stdout);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式