Чтение файлов в структуру(сериализация)
Я новичок в программировании. Сейчас разбираюсь со струкрурами. У меня такая задача - наполнить свою структуру(ManCity) данными из файла(название файла перепроверил, все ок). Вроде как делаю все правильно, но почему то выводит такую штуку(внизу все есть), а если конкретно то у меня вопрос почему выводит:
- Первые две структуры (Alex Zinchenko и Serhio Aguero);
- Вторую структуру выводит 2 раза(и оба раза неправильно);
- Почему выводимые структуры не подставляются под мою форму (в самом низу перед return я написал printf, и надеялся что все данные подставятся под этот текст);
Зарание все спасибо!
Содержимое файла:
Alex Zinchenko 22 G Ukraine
Serhio Aguero 27 G Agrentina
Benjamen Mendy 28 B France
Riad Mahrez 25 B Algeria
David Silva 28 G Spain
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct teams {
char name[15];
char surname[15];
int age;
char pos;
char country[15];
};
int main() {
struct teams ManCity;
FILE* fp = fopen("mancity.txt", "r");
fread(&ManCity, sizeof(struct teams), 1, fp);
fclose(fp);
printf("%s %s is %d years old, play as %c from %s\n", ManCity.name, ManCity.surname, ManCity.age, ManCity.pos, ManCity.country);
return 0;
}
Вывод:
Alex Zinchenko 22 G Ukraine
Serhio Aguero 27 G Agre� 22 G Ukraine
Serhio Aguero 27 G Agre� is 544172392 years old, play as A from guero 27 G Agre�
Ответы (1 шт):
Ваша ошибка в том, что вы читаете из текстового файла данные, как из бинарного. Увы, это не проходит.
Читать нужно примерно так -
fscanf(fp,"%s %s %d %c %s",ManCity.name,ManCity.surname,&ManCity.age,&ManCity.pos,ManCity.country);
Словом, чтение из текстового файла.
Чтобы читать так, как читает вы - данные должны быть точно так же и записаны в файл, с помощью fwrite, и файл должен быть открыт как бинарный, а не текстовый...