直接调用函数有效但从另一个函数调用失败

时间:2011-04-02 20:33:15

标签: c

当我使用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;
}

1 个答案:

答案 0 :(得分:0)

scanf(“%d”,&amp; choice)之后;调用时,输入仍然会有一个'\ n'(您按下的返回选项之一)。因此文件名将为空。您可以在阅读选项后添加getchar()(删除'\ n')。