【问题标题】:C, how to use fgets and fscanf togetherC、如何一起使用fgets和fscanf
【发布时间】:2013-12-12 03:51:58
【问题描述】:

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

有这样的TXT文件:

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

我必须读取这个文件并保存到 struct 中的 var。 和教授。对我说。我必须一起使用 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;
}

【问题讨论】:

    标签: c file-io fgets scanf


    【解决方案1】:

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

    【讨论】:

    • 我还有 1 个问题。当我使用 fgets 时,它也会保存换行符。但我不想保存新行,只保存字符串。我该怎么办?
    • 遍历字符串并将'\n'替换为'\0'
    猜你喜欢
    • 2014-04-15
    • 2016-04-19
    • 2012-02-13
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多