Потеря данных при записи и чтении данных из файла (файл произвольного доступа, C ++)

Сначала я инициализирую файл «hardware.dat», записывая следующие данные, а затем отображаю их в виде списка.
введите описание изображения здесь
введите описание изображения здесь

Однако, когда я обрабатываю вариант 2 и затем завершаю выбор 2 без редактирования или добавления чего-либо, все данные теряются. Я предлагаю, чтобы ничего не изменилось.
введите описание изображения здесь

Почему проблема существует? Как это исправить?

Спасибо за Ваше внимание.


Код:

int question_3()
{
cout << "Question 3" << endl;
create_One_Hundred_blank_Data();
char choice = '0';
do
{
cout << "---------------Main Menu---------------" << endl
<< "1. Initialize hardware data." << endl
<< "2. Add / Edit data." << endl
<< "3. Remove data." << endl
<< "4. Show whole data in the file." << endl;
cout << "Enter choice > ";      choice = getch();       cout << choice << endl;     // #include <conio.h>
switch_Choice(choice);
}while (choice != '0');

cout << "Program is ended." << endl;
return 0;
}void switch_Choice(char choice)
{
switch (choice)
{
case '1':
choice_1();
break;

case '2':
choice_2();
break;

case '3':
choice_3();
break;

case '4':
choice_4();
break;
}
}void choice_2()
{
hardware.open("hardware.dat", ios::binary | ios::out);
if (!hardware)
{
cerr << "File could not be opened." << endl;
exit(1);
}

int record = 0;
string tool_name = "";
int quantity = 0;
int cost = 0;
string buffer_Eater = "";

cout << "Enter record number <O to exit input> : ";     cin >> record;
while(record != 0)
{
cout << "Enter tool name                       : ";     getline(cin, tool_name); getline(cin, buffer_Eater);
cout << "Enter quantity                        : ";     cin >> quantity;
cout << "Enter cost                            : ";     cin >> cost;

write_Single_Data(myHardwareData, record, tool_name, quantity, cost);

cout << "Enter record number <O to exit input> : ";     cin >> record;
}
hardware.close();
output_Whole_File_Data();
separation_line();
}void output_Whole_File_Data()
{
hardware.open("hardware.dat", ios::binary | ios::in);
output_Data_LineHead();
hardware.read(reinterpret_cast<char *>(&myHardwareData), sizeof(HardwareData));
int counter = 0;
cout << setprecision(2) << fixed;
while (hardware && !hardware.eof())
{
if (myHardwareData.getRecord() != 0)
output_Data_Line(cout, myHardwareData);

hardware.read(reinterpret_cast<char *>(&myHardwareData), sizeof(HardwareData));
}
hardware.close();
}

1

Решение

Попробуй заменить

hardware.open("hardware.dat", ios::binary | ios::out);

от

hardware.open("hardware.dat", ios::binary | ios::out | ios::app);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]