我需要一个C程序将一个文件的内容复制到另一个文件以及以下条件:
1。)我们读取数据的文件可能存在也可能不存在。
2。)正在复制数据的文件可能存在也可能不存在。
如果文件存在,则应直接复制数据,如果文件不存在,则应该有一个选项来创建文件,在其中输入数据,然后将文件内容复制到另一个文件中。文件。
我制定了以下代码,
目前我的修改后的代码是:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *f1,*f2;
char c;
char name1[20],name2[20];
clrscr();
setvbuf(stdout, 0, _IONBF, 0);
printf("\nEnter the source file name :");
scanf("%s",name1);
if((f1=fopen(name1,"r"))==NULL)
{
fclose(f1);
f1=fopen(name1,"w");
printf("\nThe specified file does not exist \nNew file will be created");
printf("\nEnter the data for the new file : ");
while((c=getchar())!=EOF)
{
putc(c,f1);
}
fclose(f1);
}
f1=fopen(name1,"r");
printf("\nEnter the destination file name :");
scanf("%s",name2);
f2=fopen(name2,"w+");
while((c=getc(f1))!=EOF)
{
putc(c,f2);
}
rewind(f1);
rewind(f2);
printf("The data in the source file is :\n");
while((c=getc(f1))!=EOF)
{
printf("%c",c);
}
printf("\nThe data in the destination file is :\n");
while((c=getc(f2))!=EOF)
{
printf("%c",c);
}
fclose(f1);
fclose(f2);
fflush(stdin);
getch();
}
但只有当源文件已存在时,程序才能正常工作。如果我创建一个新文件,则不会对目标文件名进行任何输入,并且目标文件文件中的数据为空。那我该怎么办呢?
我应该修改什么才能使其正常工作? 建议您选择任何代码......谢谢!
答案 0 :(得分:0)
好吧,我在你的代码中看到了几个问题,但最重要的是表达式:
(c=getc(f1))!=EOF
将始终评估为true,因此您将运行无限循环。如果您阅读了getc
文档,就会发现它会返回int
而不是char
:
所以基本上你正在做的是将EOF
(通常定义为-1的int
截断为char
时:{/ p>
c=getc(f1) // At this point C = 255(0xFF) if getc returned EOF
然后在与c
进行比较时将int
提升为EOF
,因为int
很大
足以保持255,所做的比较是255!= -1,这总是正确的。
要解决此问题,只需将c
声明为int
。
更多提示:
您可能还希望使用feof
来确保它是文件结束条件,因为getc
也会在其他错误条件下返回EOF
。
您可能希望在"\n"
次调用中将printf
移动到您的生命结束,以强制刷新标准输出。或者您也可以在程序开头添加:
setvbuf(stdout, 0, _IONBF, 0);
您似乎将文件名存储在name1
和name2
中,因此您可能希望从fopen
文件名中删除双引号,以便它实际使用它们。< / p>
当您打开name2
时,您只使用写访问权限,但最后您尝试阅读并显示其内容,您可能希望使用"w+"
作为访问模式。
当您尝试打印结果数据时,f2
中的文件处理程序已经关闭。并且文件游标已经在文件末尾,因此您可能希望使用rewind
,例如
//fclose(f2);
rewind(f1);
rewind(f2);
printf("The data in the source file is :\n");
while((c=getc(f1))!=EOF)
{
printf("%c",c);
}
printf("The data in the destination file is :\n");
while((c=getc(f2))!=EOF)
{
printf("%c",c);
}
fclose(f1);
fclose(f2);
答案 1 :(得分:0)
最后成功的代码是:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *f1,*f2;
char c;
char name1[20],name2[20];
clrscr();
printf("\nEnter the source file name :");
scanf("%s",name1);
if((f1=fopen(name1,"r"))==NULL)
{
fclose(f1);
f1=fopen(name1,"w");
printf("\nThe specified file does not exist \nNew file will be created");
printf("\nEnter the data for the new file : ");
while((c=getchar())!='^')
{
putc(c,f1);
}
fclose(f1);
}
f1=fopen(name1,"r");
printf("\nEnter the destination file name :");
scanf("%s",name2);
f2=fopen(name2,"w+");
while((c=getc(f1))!=EOF)
{
putc(c,f2);
}
rewind(f1);
rewind(f2);
printf("The data in the source file is :\n");
while((c=getc(f1))!=EOF)
{
printf("%c",c);
}
printf("\nThe data in the destination file is :\n");
while((c=getc(f2))!=EOF)
{
printf("%c",c);
}
fclose(f1);
fclose(f2);
fflush(stdin);
getch();
}