Допустим, у меня есть структура
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 <School> vSchool)
{
ostream fout("out.txt", ostream::binary)
for(int i =0; i<=vSchool.size; ++i)
{
fout.write((char*)&vSchool.at(i), sizeof(School));
}
fout.close();
}
вот пример который прочитает
void readAllSchoolObj(vector <School> vSchool)
{
School school;
istream fin("out.txt");
while(!fin.eof)
{
fin.read((char*)&school, sizeof(School));
vSchool.push_back(school);
}
fin.close;
}
поиск всех фамилий с одной оценкой
void findMark(vector <School> vSchool, unsigned long mark)
{
cout<<"Surname "<<endl;
for(int i =0; i<=vSchool.size; ++i)
{
if(vSchool.at(i).mark == mark)
cout<<vSchool.at(i).surname<<endl;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Проблема заключается в следующем: написал общую ф-ию initNetAddressFromEndpoint которая по IP адресу (IPv4, IPv6, доменное имя) и порту отдает нам структуру...
Есть код, который нужно переделать, но пока не силен в jsСейчас код вызывается inline через onclick, а мне нужно, чтобы он вызывался непосредственно...
Почему мой сайт не отображается справа при поиске по слову Fashion Flash?
Ребята помогите мне плиз, хочу чтобы мой output был robin-singh-from-usaПока, что мой output это массив ["robin", "singh", "from", "usa