文件I/O函数

myclass242 2014-07-25 04:16:39
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 40
int main(int argc,char *argv[])
{
FILE *in,*out;
int ch;
char name[LEN];
int count=0;
if(argc<2) //检查命令行参数
{
fprintf(stderr,"Usage:%s Filename\n",argv[0]);
getchar();
exit(1);
}
if((in=fopen(argv[1],"r"))==NULL)
{
fprintf(stderr,"打开文件\"%s\"失败\n",argv[1]);
getchar();
exit(2);
}
strcpy(name,argv[1]);
strcat(name,".red"); //生成一个后缀为.red的新文件名
if((out=fopen(name,"w+"))==NULL)
{
fprintf(stderr,"打开文件\"%s\"失败\n",name);
getchar();
exit(3);
}
while((ch=getc(in))!=EOF) //每隔三个复制一个字符
{
if(count++%3==0)
{
putc(ch,out);
}
}
while((ch=getc(out))!=EOF) //打印文件内容
{
putc(ch,stdout);
}
while((ch=getc(in))!=EOF)
putc(ch,stdout);
if(fclose(in)!=0||fclose(out)!=0)
{
fprintf(stderr,"关闭文件\"%s\"或\"%s\"失败\n",argv[1],name);
getchar();
exit(4);
}
return 0;
}

我使用它对文件eddy进行操作,eddy文件内容为
So even Eddy came over ready
可以生成eddy.red文件,内容也没问题。
问题是代码段38到43行,打印文件内容我没看到,为什么?
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
鼻涕虫de皮皮 2014-07-25
  • 打赏
  • 举报
回复
指针到结尾了,除非你重新打开,或者使用fseek让指针再指向开始位置
shiguojie19892 2014-07-25
  • 打赏
  • 举报
回复
引用 1 楼 lovesmiles 的回复:
你的in和out已经移到文件的末节了,要把它移到文件头,加上下面红色的二句 fseek(out,0,SEEK_SET); while((ch=getc(out))!=EOF) //打印文件内容 { putc(ch,stdout); } fseek(in,0,SEEK_SET); while((ch=getc(in))!=EOF) putc(ch,stdout);
指针到了末尾
hokuhouhi 2014-07-25
  • 打赏
  • 举报
回复
38行之前加 fseek(out,0L,0); 42行之前加 fseek(in,0L,0); 原因么,你自己琢磨一下,呵呵~~~
勤奋的小游侠 2014-07-25
  • 打赏
  • 举报
回复
你的in和out已经移到文件的末节了,要把它移到文件头,加上下面红色的二句 fseek(out,0,SEEK_SET); while((ch=getc(out))!=EOF) //打印文件内容 { putc(ch,stdout); } fseek(in,0,SEEK_SET); while((ch=getc(in))!=EOF) putc(ch,stdout);

69,371

社区成员

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

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