C/C++

Помогите с файлами C++

В общем мне в лабораторной работе надо сделать несколько функций. Но проблемы возникли с последней функцией, в ней я должен вывести из бинарного файла в текстовый отсортированные имена из структуры, но они вообще не выводятся, я приложу код этой функции, возможно кто-нибудь разберется в чем ошибка, буду очень благодарен.(P.S мне надо в структурах ввести овощи и 3 месяца для каждого овоща(посев, удобрения, сбор) и надо отсортировать все овощи, которые собираются в августе))
Нет описания структуры Vegetables, поэтому ничего нельзя сказать. И неизвестно, какая ошибка.
Бауыржан Хайруллин
Бауыржан Хайруллин
58 065
Лучший ответ
Виктор Хольченков у меня куча функций, все из них работают кроме одной (записи отсортированных названий овощей, которых собирают в августе, из структуры (name) в текстовый файл)
Виктор Хольченков не работает только последняя функция, с остальными все ок
// Это пример по созданию и сохранению файла в бинарном формате с последующим его открытием и сохранением данных в вектор структур, который сортируется и данные сохраняются в текстовый файл. Сол своими овощами разбирайтесь самостоятельно.

#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
struct Product {
int article;
int quantity;
double price;
char name[32];
Product() : article(0), quantity(0), price(0.0) {
memset(name, 0, sizeof(name));
}
Product(const int a, const int q, const double p, const char* n)
: article(a), quantity(q), price(p) {
strcpy_s(name, sizeof(name), n);
}
private:
// Эта перегрузка позволяет упростить сохранение в текстовый файл и вывод данных в консоль
friend ostream& operator<<(ostream& out, const Product& p) {
return out << p.article << ' ' << p.name << ' ' << p.quantity << ' ' << p.price;
}
// Сортировать по артиклю
friend bool operator<(const Product& a, const Product& b) {
return a.article < b.article;
}
};
class Store {
public:
Store() {
cout.setf(ios::fixed);
cout.precision(2U);
}
Store(const vector<Product>& table) : table(table) {}
~Store() {
cout.unsetf(ios::fixed);
cout.precision(8U);
}
void show()const {
for (const auto& record : table) cout << record << '\n';
}
bool save_bin(const string& flename)const {
auto path = flename + ".bin";
ofstream out(path, ios::binary);
if (out.is_open()) {
for (auto& record : table) out.write((char*)&record, sizeof(record));
out.close();
return true;
}
return false;
}
void load_bin(const string& flename) {
auto path = flename + ".bin";
ifstream inp(path, ios::binary);
if (inp.is_open()) {
if (!table.empty()) table.clear();
Product tmp;
while (inp.read((char*)&tmp, sizeof(tmp)))
table.push_back(tmp);
inp.close();
}
}
bool save_txt(const string& flename)const {
auto path = flename + ".txt";
ofstream out(path);
if (out.is_open()) {
for (auto& record : table) out << record << '\n';
out.close();
return true;
}
return false;
}
bool empty()const {
return table.empty();
}
void sort() {
std::sort(table.begin(), table.end());
}
private:
vector<Product> table;
};
int main() {
system("chcp 1251 > nul");
vector<Product> box{
{ 28603, 61, 152.49, "Кроссовки, 43р." },
{ 15113, 29, 97.04, "Чайник электрический" },
{ 29500, 15, 599.99, "Газовая плита" },
{ 10235, 78, 275.36, "Столовый сервиз" },
{ 12507, 52, 983.90, "Холодильник двухкамерный" }
};
Store store{ box };
store.show();
auto filename = "product"s;
if (store.save_bin(filename)) puts("Файл сохранён в бинарном формате");
store.~Store();
Store next;
next.load_bin(filename);
next.sort();
if (next.empty()) puts("Не удалось загрузить данные!");
else if (next.save_txt(filename)) puts("Файл отсортирован и сохранён в текстовом формате");
system("pause > nul");
}