Как заполнить и распечатать массив в структуре из файла?

#c

#c

Вопрос:

 struct reviewStruct {
  char reviewer[50];
  int feedback[3];
};

int readReviews(FILE *file, struct reviewStruct reviews[10]) {

  int i;
  file = fopen("reviews.txt", "r");
  if (file == NULL) {
      printf("Error");
      exit(-1);
  }
  for(i = 0; i < 10; i  ) {
    fgets(reviews[i], 50, file);
  }
  return 0;
  fclose(file);
  for(i = 0; i < 10; i  ) {
    printf("%s", reviews[i]);
  }
}
 

Я пытаюсь заполнить «struct reviewStruct reviews[10]» информацией из текстового файла под названием «reviews.txt » Я продолжаю получать сообщение об ошибке: «ошибка: несовместимый тип для аргумента 1 «fgets»» Я не уверен, как это исправить, вывод должен быть в форме n n и так далее… Как мне это сделать?

Ответ №1:

  1. fgets(reviews[i], 50, file); -> fgets(reviews[i].reviewer, 50, file);
  2. printf("%s", reviews[i]); -> printf("%s", reviews[i].reviewer);

Ответ №2:

Объявление struct reviewStruct reviews[10] в readReviews объявлении функции создает массив структур. в этом вызове: fgets(reviews[i], 50, file); вы передаете определенную структуру, в fgets() которую ожидается передача строки. На самом деле, вы хотите передать определенный элемент структуры. Используйте оператор dot ( . ) для доступа struct к элементу ‘s. Я предполагаю, что вы хотите, чтобы ваш код выглядел следующим образом:

 struct reviewStruct {
  char reviewer[50];
  int feedback[3];
};

int readReviews(FILE *file, struct reviewStruct reviews[10]) {

  int i;
  file = fopen("reviews.txt", "r");
  if (file == NULL) {
      printf("Error");
      exit(-1);
  }
  for(i = 0; i < 10; i  ) {
    fgets(reviews[i].reviewer, 50, file);
  }
  return 0;
  fclose(file);
  for(i = 0; i < 10; i  ) {
    printf("%s", reviews[i].reviewer);
  }
}
 

Я просто заменил reviews[i] на reviews[i].reviewer , чтобы передать reviewer строку функциям, а не всей структуре.