当前位置: 代码迷 >> C语言 >> 谁能告诉我这是为什么?
  详细解决方案

谁能告诉我这是为什么?

热度:219   发布时间:2008-01-09 20:44:40.0
谁能告诉我这是为什么?
为什么在“copyfile.txt"文件中会多出一个奇怪的字符,希望大家给予解答!
#include <stdio.h>
#include <stdlib.h>
int main()
{
  FILE *fp,fp1;
  int ch;
  if((fp=fopen("file.txt","r"))==NULL)
  {
     printf("Can't pen the file..");
     exit(EXIT_FAILURE);
  }
  if((fp1=fopen("copyfile.txt","w"))==NULL)
  {
     printf("Can't pen the file..");
     exit(EXIT_FAILURE);
  }
  while(!feof(fp))
  {
     ch=fgetc(fp);
     fputc(ch,fp1);
  }
  fclose(fp);
  fclose(fp1);
  system("pause");
  return 0;
}
搜索更多相关的解决方案: file  pen  FAILURE  txt  

----------------解决方案--------------------------------------------------------
while(!feof(fp))
  {
     ch=fgetc(fp);
     if(!feof(fp))//先这么改吧
         fputc(ch,fp1);
  }
----------------解决方案--------------------------------------------------------
能不能告诉我,这到底是为什么吗?
书上的好多例题都是像我那样的。
----------------解决方案--------------------------------------------------------
while(!feof(fp))
  {
     ch=fgetc(fp);
     fputc(ch,fp1);
  }

在最后一次执行ch=fgetc(fp);的时候,ch实际上的值是不确定的,然后又执行了   fputc(ch,fp1);
----------------解决方案--------------------------------------------------------
但是这时实际上已经到了eof了。
----------------解决方案--------------------------------------------------------
FILE *fp,fp1;
这里错了。
----------------解决方案--------------------------------------------------------
哦,那里漏了,实际那里有*fp1的
----------------解决方案--------------------------------------------------------
当文件内的指针到达最后一个字符时,fgetc()读取了下一个字符,实际上不存在。所以要先判断fgetc()时是否已到达文件末。
----------------解决方案--------------------------------------------------------
不是说,fgetc(fp)读取一个字符后,指针会指向前一个吗?如果读到了最后一个的话,fp文件指针应该移到了文件末尾了。再判断(!feof(fp))就应该为假了呀!
----------------解决方案--------------------------------------------------------
原帖由 [bold][underline]devfhpgah[/underline][/bold] 于 2008-1-9 21:46 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1176387&ptid=196745][/url]
不是说,fgetc(fp)读取一个字符后,指针会指向前一个吗?如果读到了最后一个的话,fp文件指针应该移到了文件末尾了。再判断(!feof(fp))就应该为假了呀! ...


不是的,
fp文件指针应该移到了文件末尾了
是不假,但是还没有去读这个,
末尾
的时候,eof标志不会被设置的
----------------解决方案--------------------------------------------------------
  相关解决方案