运行时,读取一个文件的内容(如1.txt),写入另一个文件(如2.txt),结果会发现2.txt中,在结尾会多出一个未知字符。请问,这是怎么回事?
还有就是,为什么第一次输入文件名时,要在后面跟一句getchar()来接受回车符(如果不写,则输出文件的第一行会空一行),而第二次则不需要?
程序如下:
/* 用fopen函数向文件输入内容,以#结尾*/
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp,*in,*out;
char ch,filename[10],outfile[10];
printf("请输入所用的文件名:\n");
scanf("%s",filename);
/*if((fp=fopen(filename,"w"))==NULL) 无需进行判断,因为若所用文件不存在,则会创建新的文件
{
printf("无法打开此文件\n");
exit(0);
}*/
fp=fopen(filename,"w");/* w左右必须有双引号,否则报错 */
ch=getchar();/*此句用来接受在执行scanf语句时最后输入的回车符,若不加此句,则在存储文件中,第一行会空一行*/
printf("请输入一个准备存储到磁盘的字符串,以#结束:\n");
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp); //去掉此句,运行结果也没有变化,为什么?
putchar(10);
in=fopen(filename,"r");
printf("请输入要输出的文件名:\n");
scanf("%s",outfile);
out=fopen(outfile,"w");
//ch=getchar(); 此句为何可以不写也不会在文件第一行有空行,而第一个语句不写,则会出现空行?
while(!feof(in)) /*如果未遇到输入文件的结束标志*/
{
ch=fgetc(in);
fputc(ch,out);
putchar(ch);
}
putchar(10);
fclose(in);
fclose(out);
}
谢谢,请问,EOF可不可以不接受呢?如果不想将EOF写入2.txt,程序应如何修改?