C,如何一起使用fgets和fscanf

时间:2013-12-12 03:51:59

标签: c file-io fgets scanf

我有一份大学作业表格。 那就是使用文件IO。

有这样的TXT文件:

Brian
s213551 50 70 70 50
Alex Fernandes
s210011 70 81 50 89
Young Lee
s211213 60 80 60 90
... and more

我必须阅读此文件并保存到var in struct。 和教授对我说。我必须一起使用fgets和fscanf。 如果我只使用fscanf它不能很好地工作,因为“Alex Fernandes”中有空间。

但即使我一起使用fgets和fscanf,它也无法正常工作.. 所以我需要帮助你。

这是我的来源:

#include <stdio.h>
#include <stdlib.h>

typedef struct sMember{
        char name[10];
        char id[10];
        int score[4];
        double avg;
        char grade;
}MEM;

int main(int argc, char *argv[])
{
  MEM member[50];
  FILE *f;
  char fileName[10];
  char s[512];
  int i;
  printf("File Name : ");
  scanf("%s", fileName);
  fflush(stdin);

  i=0;
  if((f = fopen(fileName, "r")) != NULL )
  {

//        while(!feof(f)) 
          while(fgets(member[i].name, sizeof(member[i].name), f) != 0)
        {
         fscanf(f, "%s %d %d %d %d", member[i].id, &member[i].score[0], &member[i].score[1], &member[i].score[2], &member[i].score[3]);

         printf("%s %s %d %d %d %d\n", member[i].name, member[i].id, member[i].score[0], member[i].score[1], member[i].score[2], member[i].score[3]);
         //printf("t: %s\n", member[i].name);
         i++;               
        }
  } 
  else 
  {
      printf("File is Not Exist.\n"); 
  }


  fclose(f);
  system("PAUSE");  
  return 0;
}

1 个答案:

答案 0 :(得分:2)

只需在fscanf()参数的末尾添加一个空格即可使用换行符。

fscanf(f, "%s %d %d %d %d ", member[i].id, &member[i].score[0], &member[i].score[1], &member[i].score[2], &member[i].score[3]);