将文件保存到结构

Save file to struct

我需要读取文件并将其保存到结构中。

文件输入示例:

A​​aaaa Aaaaa 2010 999.00 999.00 999.00 999.00 999.00
Bbbbb Bbbbbbb 2012 1001.00 1001.00 1001.00 1001.00 1001.00
Cccc Ccccccccc 2010 1001.00 1001.00 1001.00 1001.00 1001.00

代码:

#include <stdio.h>
struct Worker {
  char name[20], surname[20];
  int year;
  double salary[5];
} arr[1000];
int number_of_workers = 0;
void load() {
  FILE *input = fopen("input.txt", "r");
  int i = 0, j;
  while (i < 1000) {
    fscanf(input, "%s %s %d\n", arr[i].name, arr[i].surname, arr[i].year);
    i++;
    for (j = 0; j < 5; j++)
      fscanf(input, "%d ", arr[i].salary[j]);
    if (feof(input))
      break;
  }
  fclose(input);
  number_of_workers = i;
}
int main() {
  load();
  int i, j;
  for (i = 0; i < number_of_workers; i++) {
    printf("%s %s %d ", arr[i].name, arr[i].surname, arr[i].year);
    for (j = 0; j < 5; j++)
      printf("%.2f ", arr[i].salary[j]);
    printf("\n");
  }
  return 0;
}

我在屏幕上什么也看不到。你能帮我解决这个问题吗?

这是固定版本。

您在阅读整数和双精度时遗漏了 &。使用 fscanf,您可以只检查读取的项目数以确定何时到达文件末尾。 每一行都可以在单个 fscanf 调用中读取(如果你想走那条路),不需要双循环。

编辑:作为旁注,对于字符串,您必须小心不要溢出缓冲区。您可以添加 %19s 来限制读取的字符。另外,您可以检查 fopen 的 return 值。

#include <stdio.h>

struct Worker {
  char name[20], surname[20];
  int year;
  double salary[5];
} arr[1000];

int number_of_workers = 0;

void load() 
{
    FILE *input = fopen("input.txt", "r");

    int i = 0;
    while (i < 1000 && (fscanf(input, "%s %s %d %lf %lf %lf %lf %lf", arr[i].name, arr[i].surname, &arr[i].year, &arr[i].salary[0], &arr[i].salary[1], &arr[i].salary[2], &arr[i].salary[3], &arr[i].salary[4]) == 8))
    {
        number_of_workers++;
        i++;
    }  
    fclose(input);
}
int main() 
{
    load();
    for (int i = 0; i < number_of_workers; i++) 
    {
        printf("%s %s %d %.2f %.2f %.2f %.2f %.2f", arr[i].name, arr[i].surname, arr[i].year, arr[i].salary[0], arr[i].salary[1], arr[i].salary[2], arr[i].salary[3], arr[i].salary[4]);
        printf("\n");
    }
    return 0;
}