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);
}
输入字符怎么没有输出啊 展开
void main()
{
int c;
static char buf[BUFSIZ];
setbuf(stdout,buf);
while((c=getchar()) != EOF)
putchar(c);
fflush(stdout);
}
输入字符怎么没有输出啊 展开
2个回答
展开全部
你的程序流程是这样的:
①
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里面的内容全部输出。
展开全部
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询