这是输入文件中数据到新文件的代码,如果输出文件已经存在,用户可以选择提供新地址或退出。
当我将goto readout
置于内部开关时,开关和goto工作但在该程序退出后不带输出文件地址。
这是截图:
代码:
#include<stdio.h>
int main()
{
int n;
FILE *in,*out;
char inadd[50],outadd[50],ch;
readin:
printf("Enter the address of input file: ");
gets(inadd);
in=fopen(inadd,"r");
if(in==NULL) //reading and validating input file address
{
printf("There is an error with the opening of the file, please reenter the file name.\n");
goto readin; //readin call
}
readout:
printf("Enter the address of output file: ");
gets(outadd);
out=fopen(outadd,"r");
if(out!=NULL) //reading and validating output file address
{
printf("File already exists, to reenter file address enter 1 & to exit enter 2:");
scanf("%d",&n);
switch (n) //switc-case
{
case 1: printf("\n");
goto readout; //readout call
break;
case 2: exit(0);
}
}else //file is read and copied to input file.
{
out=fopen(outadd,"w");
while(!feof(in))
{
fscanf(in,"%c",&ch);
fprintf(out,"%c",ch);
}
fclose(in);
fclose(out);
printf("\n\nSuccess!\nFile copied successfully\n\n");
}
}
答案 0 :(得分:3)
请尝试以下代码。原因是scanf在缓冲区中留下了换行符,gets
选择了该换行符。
printf("File already exists, to reenter file address enter 1 & to exit enter 2:");
scanf("%d",&n);
int c;
do {
c = getchar();
}while(c != '\n' && c != EOF);