2011-04-02 75 views
0

當我使用display_menu函數調用read_txt_file()它不起作用。我無法獲取文件內容到標準輸出,但是當我直接使用read_txt_file()時,它可以正常工作。我可以在stdout中看到文件的內容。 display_menu有什麼問題?調用函數直接工作,但從另一個函數調用失敗

#include <stdio.h> 
typedef struct filename 
{ 
     int age; 
     char name[100]; 
}name_t; 

name_t * fname=NULL; 

void quit() 
{ 
     printf("\nPress enter to exit"); 
     fflush(stdin); 
     getchar(); 
} 

enter(char prompt[]) 
{ 
     puts(prompt); 
     fflush(stdin); 
     getchar(); 
}  

void read_txt_file() 
{ 
    char ch; 
    fname=(name_t *)malloc(sizeof(name_t)); 
    FILE *fptr=NULL; 
    atexit(quit); 
    printf("Please enter the file name to read : "); 
    fflush(stdin); 
    scanf("%s",fname->name); 
    fptr=fopen(fname->name,"r"); 
    if(fptr == NULL) 
    { 
      perror("Could not open the file "); 
      return; 
    } 
    printf("+++++++++++++++++++++++++++++++++++++++++++++++++"); 
    printf("Contents of the file %s are : ",fname->name); 
    **while(ch != EOF) 
    { 
      ch=fgetc(fptr); 
      printf("%c",ch); 
    }** 
    enter("press enter"); 
    fclose(fptr);  
} 

display_menu() 
{ 
    int choice; 
    while(1) 
    { 
     system("cls"); 
     printf("\t\t1.read and display from a file\n \ 
       \b2.quit\n"); 
       scanf("%d",&choice); 
     switch(choice) 
     { 
         case 1 : 
          read_txt_file(); 
          break; 
         case 2 : 
          exit(0); 
         default : 
           printf("please enter proper choice(1-3)\n Enter to continue"); 
           fflush(stdin); 
           getchar(); 
     } 
    } 

} 


int main() 
{ 
    /* 
    read_txt_file(); 
    */ 
    **display_menu();** 
    return 0; 
} 
+0

您是否嘗試通過調試器逐步調試display_menu()?交換機中「選擇」的價值是什麼? (注意,**請**閱讀http://stackoverflow.com/editing-help瞭解如何格式化您的帖子的說明。) – 2011-04-02 20:38:38

+0

如果您沒有投射malloc的結果,編譯器會抱怨它是沒有定義,因爲你沒有'#include'd'stdlib.h'。 – dmckee 2011-04-02 20:39:47

+0

您可以在'case 1'中添加一張照片,看看您是否曾經到過那裏... – MByD 2011-04-02 20:42:42

回答

0

之後scanf(「%d」,&選擇);調用時,輸入仍然會有一個'\ n'(您輸入選擇的回報中的一個)。所以文件名將是空的。您可以在閱讀選項(刪除'\ n')後添加一個getchar()。

+0

是的,它的工作,但如何文件名可能是空的即使沒有使用getchar(),我已經使用fflush(stdin);我得到的文件名fname->名稱在標準輸出的值。 scanf(「%s」,fname-> name);刷新函數read_txt_file()中的緩衝區 – mukesh 2011-04-02 21:01:12