putchar(ch)函数的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/24 19:12:31
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
void main()
{
FILE *fp;
char ch,filename[10];
scanf("%s",filename);
if ((fp=fopen(filename,"w"))==NULL)
{printf("can not open file!\n");
exit(0);
}
ch=getchar();
ch=getchar();

while(ch!='#')
{
fputc(ch,fp);putchar(ch);
ch=getchar();

}
putchar(10);
fclose(fp);
}
上述代码中,向文件写入,并读出时候,
fputc(ch,fp);putchar(ch);我理解是输入一个字符,紧跟着就把这个字符输出,但事实上不是,是等多个字符输入完,回车后,一次性输出所输入字符。
我不解,求助……

注意:
当用标准文件函数对文件进行读写操作时, 首先将所读写的内容放进缓冲区,
即写函数只对输出缓冲区进行操作, 读函数只对输入缓冲区进行操作。例如向一个文件写入内容, 所写的内容将首先放在输出缓冲区中, 直到输出缓冲区存满或 使用fclose()函数关闭文件时, 缓冲区的内容才会写入文件中。若无fclose() 函数, 则不会向文件中存入所写的内容或写入的文件内容不全。所以在对文件操作中,打开文件后记得在程序最后一定要用flcose(fp);关闭文件。

这是因为操作系统有缓冲机制。你可以用setbuf函数设定缓冲区大小,如果设成0,就有你希望的结果了。