谭浩强《C程序设计》315页文件读写的例子看不懂

yyxxh 2006-06-08 10:46:21
#include <stdlib.h>
#include <stdio.h>
void main(void)
{FILE *fp;
char ch,filename[10];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}

ch=getchar( );
ch=getchar( );
while(ch!='#')
{
fputc(ch,fp);putchar(ch);
ch=getchar();
}
fclose(fp);
}
例如,输入file1.c
Computer and c#
输出Computer and c,为什么不是输入和输出同时进行呢?即显示为"CCoommppuutter aanndd cc#"?
...全文
192 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bo.cui 2006-06-09
  • 打赏
  • 举报
回复
在你还没按回车的时候,程序处于中断状态~
 而你输入的数据会放在缓冲区里面(可以用fflush(stdin)清空)  当按回车的时候
进程被唤醒  继续执行  并且依次从缓冲里把数据读出来!
zhgc1983 2006-06-09
  • 打赏
  • 举报
回复
这样输入
C回车
C
o回车
o
m回车
m
p回车
p
u回车
u
t回车
t
e回车
e
r回车
r
回车

a回车
a
n回车
n
d回车
d
回车

c回车
c
#回车

这就是你想要的!

如果这样输入:
Computer and c#
由于没有回车,你的程序被中断,后面的代码都还没执行呢!
linzsoft 2006-06-09
  • 打赏
  • 举报
回复
ch=getchar(); 则相当于 getc(stdin);

linzsoft 2006-06-09
  • 打赏
  • 举报
回复
putchar 和 fputc 输出的文件不一样。putchar输出到屏幕,fputc输出到文件。当然不会重复了。

实际上 putchar 是一个宏定义 不是真正的函数。== putc(c,stdout);
yyxxh 2006-06-09
  • 打赏
  • 举报
回复
明白了,感谢各位热心解答。
0黄瓜0 2006-06-08
  • 打赏
  • 举报
回复
while(ch!='#')
{
fputc(ch,fp);
putchar(ch);
ch=getchar();//键盘的输入首先会存入一个缓冲区,当按下Enter键后才会
//触发getchar()从缓冲区的读操作
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧