【C语言】关于向文件读写字符的问题。万分感谢!!

#include<stdio.h>#include<stdlib.h>intmain(void){FILE*in,*out;charch,infile[10],outfi... # include<stdio.h>
# include<stdlib.h>

int main(void)
{
FILE *in , *out ;
char ch,infile[10],outfile[10];
printf("输入读入文件的名字:");
scanf("%s",infile);
printf("输入输出文件的名字:");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("无法打开此文件\n");
exit(1);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("无法打开此文件\n");
exit(1);
}
while(!feof(in))
{
ch = fgetc(in);
fputc(ch,out);
putchar(ch);
}
putchar(10);
fclose(in);
fclose(out);
return 0 ;
}

上面那个代码我是照谭浩强的书原原本本的打下来的。
它的功能是把一个文件的数据复制给另一个文件。
我的问题是,当要被复制的那个文件是文本文件时候。复制后的文件总会比原来的文件多一个空格。不信你们试试。我想知道,为什么会出现这种情况?

万分感谢!!
万分感谢!!
展开
 我来答
beddy1
2011-08-14 · TA获得超过1989个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2207万
展开全部
他这个代码写的有点小问题, feof() 函数返回的是最后一次读出后流是否结束,而不是流是否已经到达终点(即下次读出会遇到EOF)。所以fgetc最后会遇到一个EOF,即-1,多出来的一个字符不是空格,其内容就是-1的char,即0xFF。正确的代码应该这样改。
ch = fgetc(in);
while(!feof(in))
{
fputc(ch,out);
putchar(ch);
ch = fgetc(in);
}

再随便说一句,谭的书还是别看了,误人子弟的书。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jwkwy
2011-08-14 · TA获得超过117个赞
知道答主
回答量:156
采纳率:0%
帮助的人:99.8万
展开全部
就是while(!feof(in))的问题,只要in的文件指针还没有指向EOF,下面的读写就执行。直到把-1读出来写到outfile里面,这时候in指向EOF,循环结束。那个-1就是多出来的空格(我这里是个y上面加两个点)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1fc36d4
2011-08-14 · TA获得超过3131个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1827万
展开全部
fgetc的原型是int fgetc(FILE *stream);
建议int ch;这样定义

while(!feof(in))
{
ch = fgetc(in);
if(ch==EOF) break;/*这样试试看,怀疑文件尾时,ch是-1,其实不管怎么样,这时候不需要输出ch了*/
fputc(ch,out);
putchar(ch);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式