Допустим, у меня есть структура
struct SCHOOL
{
unsigned long mark;
char subject[20];
char surname[20];
short age;
};
Для записи её в файл я написал функцию
SCHOOL setInfo()
{
SCHOOL s;
ofstream fout("out.txt", ios::app);
cout << "mark: "; cin >> s.mark;
cout << "subject: "; cin >> s.subject;
cout << "surname: "; cin >> s.surname;
cout << "age: "; cin >> s.age;
fout.write((char*)&s, sizeof(SCHOOL));
fout.close();
}
Как правильно написать функцию для считывания и потом работать с элементами структуры, например, вывести все фамилии с оценками 9?
Я написал такую функцию,
void getInfo()
{
SCHOOL s;
ifstream fin("out.txt", ios::in);
while (!fin.eof())
{
fin.read((char*)&s, sizeof(SCHOOL));
}
fin.close();
}
Но она работает неправильно.
Ответ
Вот ваша структура
struct School
{
unsigned long mark;
char subject[20];
char surname[20];
short age;
};
Вот так лучше писать и читать
void setInfo(School& school)
{
ofstream fout("out.txt", ostream::binary); //инициализация потока файла
//Заполнили структурку
cout << "mark: "; cin >> school.mark;
cout << "subject: "; cin >> school.subject;
cout << "surname: "; cin >> school.surname;
cout << "age: "; cin >> school.age;
//записали
fout.write((char*)&school, sizeof(School));
fout.close();
}
void getInfo(School& school)
{
ifstream fin("out.txt", ios::in);
while (!fin.eof())
{
fin.read((char*)&school, sizeof(School));
}
fin.close();
}
int main()
{
School school;
//так пишем
setInfo(school);
//так читаем
getInfo(school);
}
это что касается считывания из файла
, далее для работы с множественными объектами струтктуры необходио использовать контейнеры, напрмиер vector или list.
вот пример функции которая запишет в файл все ваши объекты
void recAllSchoolObj(vector
вот пример который прочитает
void readAllSchoolObj(vector
поиск всех фамилий с одной оценкой
void findMark(vector
Комментариев нет:
Отправить комментарий