转到内部开关盒工作异常

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);