【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 ;
}
上面那个代码我是照谭浩强的书原原本本的打下来的。
它的功能是把一个文件的数据复制给另一个文件。
我的问题是,当要被复制的那个文件是文本文件时候。复制后的文件总会比原来的文件多一个空格。不信你们试试。我想知道,为什么会出现这种情况?
万分感谢!!
万分感谢!! 展开
# 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 ;
}
上面那个代码我是照谭浩强的书原原本本的打下来的。
它的功能是把一个文件的数据复制给另一个文件。
我的问题是,当要被复制的那个文件是文本文件时候。复制后的文件总会比原来的文件多一个空格。不信你们试试。我想知道,为什么会出现这种情况?
万分感谢!!
万分感谢!! 展开
3个回答
展开全部
他这个代码写的有点小问题, feof() 函数返回的是最后一次读出后流是否结束,而不是流是否已经到达终点(即下次读出会遇到EOF)。所以fgetc最后会遇到一个EOF,即-1,多出来的一个字符不是空格,其内容就是-1的char,即0xFF。正确的代码应该这样改。
ch = fgetc(in);
while(!feof(in))
{
fputc(ch,out);
putchar(ch);
ch = fgetc(in);
}
再随便说一句,谭的书还是别看了,误人子弟的书。
ch = fgetc(in);
while(!feof(in))
{
fputc(ch,out);
putchar(ch);
ch = fgetc(in);
}
再随便说一句,谭的书还是别看了,误人子弟的书。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是while(!feof(in))的问题,只要in的文件指针还没有指向EOF,下面的读写就执行。直到把-1读出来写到outfile里面,这时候in指向EOF,循环结束。那个-1就是多出来的空格(我这里是个y上面加两个点)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
建议int ch;这样定义
while(!feof(in))
{
ch = fgetc(in);
if(ch==EOF) break;/*这样试试看,怀疑文件尾时,ch是-1,其实不管怎么样,这时候不需要输出ch了*/
fputc(ch,out);
putchar(ch);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询