转到内部开关盒工作异常
goto inside switch case working weirdly
这是将输入文件中的数据写入新文件的代码,如果输出文件已经存在,用户可以选择提供新地址或退出。
当我将 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");
}
}
试试下面的代码。原因是 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);
这是将输入文件中的数据写入新文件的代码,如果输出文件已经存在,用户可以选择提供新地址或退出。
当我将 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");
}
}
试试下面的代码。原因是 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);