转到开关盒里面很奇怪

时间:2015-11-15 08:13:39

标签: c switch-statement goto

这是输入文件中数据到新文件的代码,如果输出文件已经存在,用户可以选择提供新地址或退出。 当我将goto readout置于内部开关时,开关和goto工作但在该程序退出后不带输出文件地址。 这是截图: this is the screenshot of program output

代码:

#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");
    }
}

1 个答案:

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