-2
私はインベントリプログラムを作成しようとしています。 ios :: appのようにinventory.txtファイルのデータを上書きしないようにする必要がありますが、ios :: appデータを追加すると破損した/ゴミ箱に読み込まれてしまいます。C++ fasteファイルからの読み込みでゴミが出る
私は問題がこの行にまで及ぶと思います: outfile.open( "inventory.txt"、ios :: out | ios:app | ios :: binary);
下記の機能を貼り付けました。
ありがとうございます!
void add() {
Inventory Item;
int recnum;
ofstream outfile;
// opening file
outfile.open("inventory.txt", ios::out | ios:app | ios::binary);
if (outfile.fail())
cout << "\nFile failed to open" << endl;
cout << "\nPlease enter the record ID to be added (will overwrite duplicates) : ";
cin >> recnum;
cout << "\n" << recnum << " has been set as the record ID for this item." << endl;
cout << "Please enter item description in 50 characters or less : ";
cin.ignore();
cin.getline(Item.description, size);
// do-whiles below are for looping for input validation
do {
cout << "Please enter the number of items on hand : ";
cin >> Item.quantity;
if (Item.quantity < 0)
cout << "Please enter a valid number." << endl;
} while (Item.quantity < 0);
do {
cout << "Please enter the wholesale price for this item : ";
cin >> Item.wholesale;
if (Item.wholesale < 0.01)
cout << "Please enter a valid number." << endl;
} while (Item.wholesale < 0.01);
do {
cout << "Please enter the retail price for this item : ";
cin >> Item.retail;
if (Item.retail < 0.01)
cout << "Please enter a valid number." << endl;
} while (Item.retail < 0.01);
// couldn't figure out how to perform input validation for date
cout << "Please enter the date this item was added (format: mm/dd/yyyy) : ";
cin.ignore();
cin.getline(Item.dateadded, datesize);
// finding position in file, writing to file, closing file
outfile.seekp(recnum*sizeof(Item), ios::beg);
outfile.write(reinterpret_cast<char *>(&Item), sizeof(Item));
outfile.close();
}
あなたのofstreamの使用して....あなたのタイトルはあなたのコードが1に書き込み、「ファイルから読み込む」と言い –
....はifstreamではありません!また、 'Item'の宣言は何ですか?PODではなく、今あなたが行っているようなファイルに書き込むことはできません。 – Borgleader
ねえねえ、でも、私がデータを書いているときに起こっていると思う問題です。私はこの後に呼び出すdisplay()関数を持っていて、ios :: appを追加した後にガベージの表示を開始するだけです。 – Kubie