C、 如何同时使用fgets和fscanf

C、 如何同时使用fgets和fscanf,c,file-io,fgets,scanf,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。 教授对我说。我必须同时使用fgets和fscanf。 如果我只使用fscanf,它不会很好地工作,因为“Alex Fernandes”有空间 但即使我同时使用FGET和fsca

我有一份来自大学的家庭作业。 那就是使用文件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。 教授对我说。我必须同时使用fgets和fscanf。 如果我只使用fscanf,它不会很好地工作,因为“Alex Fernandes”有空间

但即使我同时使用FGET和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;
}
#包括
#包括
类型定义结构sMember{
字符名[10];
字符id[10];
整数分[4];
双平均值;
煤焦品位;
}MEM;
int main(int argc,char*argv[])
{
成员[50];
文件*f;
字符文件名[10];
chars[512];
int i;
printf(“文件名:”);
scanf(“%s”,文件名);
fflush(stdin);
i=0;
如果((f=fopen(文件名,“r”)!=NULL)
{
//而(!feof(f))
while(fgets(成员[i].name,sizeof(成员[i].name),f)!=0)
{
fscanf(f,“%s%d%d%d%d”,成员[i]。id,&成员[i]。分数[0],&成员[i]。分数[1],&成员[i]。分数[2],&成员[i]。分数[3]);
printf(“%s%s%d%d%d%d%d\n”,成员[i]。名称,成员[i]。id,成员[i]。分数[0],成员[i]。分数[1],成员[i]。分数[2],成员[i]。分数[3]);
//printf(“t:%s\n”,成员[i]。名称);
i++;
}
} 
其他的
{
printf(“文件不存在。\n”);
}
fclose(f);
系统(“暂停”);
返回0;
}

只需在
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]);

我还有一个问题。当我使用fgets时,它的保存新行字符也是。但我不想保存新行,只保存字符串。如何处理?检查字符串并将
'\n'
替换为
'\0'