如何使用fscanf从文件中获取大量输入到结构中。 ANSI C89(90)

时间:2017-11-25 15:15:34

标签: c struct scanf c89

我的程序中有一些代码存在问题。我需要读取一个文件并将其内容逐行放入结构中。该文件长约800行,当我尝试打印我的结构时,它现在应该包含文件的内容,它只打印大约30行应该是。其余的存档错误或格式错误。这是我现在的功能,我简单地称之为main。我不确定有什么问题,但也许它与我的malloc调用有关?

void read_file(void){
 int lines = count_lines(); /*function to count amount of lines in file*/
 FILE *file;
 int i = 0;
 char filename[] = "race.txt";
 file = fopen(filename, "r");
 race_info *race = malloc(sizeof(race_info));
 if (file != NULL) {
    while (i < lines) {
        fscanf(file, " %[A-Za-z]s %[A-Za-z]s %[A-Z]s %d %[A-Z]s %[A-Z]s %d %d",
               race[i].race_name,
               race[i].name,
               race[i].lastname,
               &race[i].age,
               race[i].team,
               race[i].country,
               &race[i].position,
               &race[i].time);
        i++;
    }
 }
 else {
    perror(filename); //print the error message
 }
 for (i = 0; i < lines; i++) {
    printf("%s %s %s %d %s %s %d %d",
          race[i].race_name,
          race[i].name,
          race[i].lastname,
          race[i].age,
          race[i].team,
          race[i].country,
          race[i].position,
          race[i].time);
 }
 fclose(file);
} 

结构设置如下:

#define MAX_CHAR 100



struct race_info{
  char race_name[MAX_CHAR];
  char name[MAX_CHAR];
  char lastname[MAX_CHAR];
  int age;
  char team[MAX_CHAR];
  char country[MAX_CHAR];
  int position;
  int time;
};
typedef struct race_info race_info;

文件中的行设置为:

RaceName               "Name LASTNAME"                                AGE  TEAM   Country      Position      TIME

目标是打印结构,以便使用与文件相同的格式打印所有800行。但是在打印时它只打印大约200行并且它不会从文件的开头到结尾,而是从中间取出内容。许多行也有错误的格式。

example of running program

1 个答案:

答案 0 :(得分:2)

race_info *race = malloc(sizeof(race_info));似乎只为单个race_info分配空间。

您可能应该malloc(lines * sizeof(race_info))适合所有行。