谁能告诉我这是为什么?
为什么在“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;
}
----------------解决方案--------------------------------------------------------
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))就应该为假了呀! ...
不是说,fgetc(fp)读取一个字符后,指针会指向前一个吗?如果读到了最后一个的话,fp文件指针应该移到了文件末尾了。再判断(!feof(fp))就应该为假了呀! ...
不是的,
fp文件指针应该移到了文件末尾了
是不假,但是还没有去读这个,末尾
的时候,eof标志不会被设置的 ----------------解决方案--------------------------------------------------------