2015-11-15 54 views
0

這是一個代碼到輸入文件中的數據到一個新的文件,如果輸出文件已經存在,用戶將有選擇提供新地址或退出。 當我把goto readout放在開關裏面時,開關就開始工作了,但是之後程序退出了,而沒有輸出文件地址。 這是截圖: this is the screenshot of program outputgoto inside switch case case奇怪的工作

,代碼:

#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

爲什麼不使用do ... while循環? –

回答

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

我認爲應該提到,沒有人應該使用'gets'。 – szczurcio