Я создаю эту программу, которая хранит некоторые элементы в файле (.dat). Кажется, что программа работает без сбоев, но когда я пытаюсь прочитать данные из файла, я вижу специальный символ на моем экране и ни один из данных что я пытался сохранить, был сохранен должным образом, обратите внимание, что когда я запускаю подобный код в main()
, он работает, и он действительно показывает мне правильный вывод .. пожалуйста, помогите мне в этом, я действительно не знаю, что делать здесь
void viewFile() {
Product item;
ifstream file("products.dat", ios::binary);
if (!file.read(reinterpret_cast<char*>(&item), sizeof(Product))) {
cout <<"failed to read";
system("exit");
}
item.viewProduct();
while (!file.eof()) {
item.viewProduct();
cout <<endl <<endl;
file.read((char *)(&item), sizeof(Product));
}
file.close();
}
void addProductToInventory() {
string name;
int quantity;
int pricePerItem;
ofstream obj("products.dat", ios::out | ios::binary);
Product item;
int numberOfProducts;
cout <<"enter the number of products you want to add in this inventory: ";
cin >> numberOfProducts;
for (int counter = 1; counter <= numberOfProducts; counter++) {
Product product;
cout <<"enter the name of the object: ";
cin >> name;
cout <<"enter the quantity of the product: ";
cin >> quantity;
cout <<"enter the price of this product (per item): ";
cin >> pricePerItem;
product.setName(name);
product.setQuantity(quantity);
product.setPricePerItem(pricePerItem);
if (!obj.write(reinterpret_cast<char*>(&product), sizeof(Product))) {
cout <<"failed writing\n";
system("exit");
}
cout <<"item added\n\n";
}
obj.flush();
obj.close();
}
это мой код в main()
, который работает точно такой же код .. я думаю,
ofstream file ("products.dat", ios::out | ios::binary | ios::trunc);
Product p1("hammer", 12, 3);
Product p2("screw driver", 43, 1);
if (!file.write(reinterpret_cast<char*>(&p1), sizeof(Product))) {
cout <<"failed to write";
system("exit");
}
file.write(reinterpret_cast<char*>(&p2), sizeof(Product));
file.close();
ifstream file2("products.dat", ios::out | ios::binary);
if (!file2.read(reinterpret_cast<char*>(&p1), sizeof(Product))) {
cout <<"failed to read";
system("exit");
}
while (!file2.eof()) {
p1.viewProduct();
cout <<endl <<endl;
file2.read((char *)(&p1), sizeof(Product));
}
file2.close();
}
PS Мне очень жаль, если это оказывается грязным вопрос ... Я отлаживал это часами, а теперь даже не могу думать прямо.