Добавление структуры и её запись в бинарный файл
Написал пару функций. Функция Adding() добавляет структуру в конец массива структур. Когда я вызывают эту функцию, происходит запрос на ввод информации для элементов структуры в консоли. Всё бы ничего, но почему-то консоль не даёт мне ввести последнее значение (значение для элемента pass_number), хотя всё написано также. Делал уже подобное, но там с таким не сталкивался. В чём же проблема?
Вторая проблема заключается в записи структуры в бинарный файл. Я открываю файл в бинарном режиме и режиме для удаления всего содержимого, значит изначально файл пуст. Функция записи в файл вызывается внутри функции Adding(), поэтому то, что я ввожу в консоли, должно записаться в файл в виде, который понятен машине. Но посмотрев содержимое файла, я засомневался в том, что всё сделано верно, ибо там находятся значения, которые я ввёл в консоли, а между ними располагается различное количество букв "Н". Вообще не понимаю что не так.
Смит НННННННННННННННДжон НННННННННННННННАльфредович НННННННН+375294678290 ННННННМосква НННННННННННННШереметьево НННННННН4 BMW НННННННННННННННН4559 НННННННННННННННКН-4 ННННННННННННННН
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
struct Car_owner {
char surname[20];
char name[20];
char otchestvo[20];
char telephone[20];
struct Adress {
char city[20];
char street[20];
int house;
int flat;
} adress;
char kind[20];
char car_number[20];
char pass_number[20];
};
int menu();
void CreatingFile(Car_owner* mass, int N, int &n);
void Adding(Car_owner* mass, int N, int &n);
void Output(Car_owner* mass, int N, int &n);
void Removing(Car_owner* mass, int N, int &n);
void Sorting(Car_owner* mass, int N, int &n);
void Exit(Car_owner* mass, int N, int &n);
void(*masf[])(Car_owner* mass, int N, int &n) = { CreatingFile, Adding, Output, Removing, Sorting, Exit };
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int N = 8, n = 0;
Car_owner* mass = new Car_owner[N];
(*masf[menu()])(mass, N, n);
system("pause");
return 0;
}
int menu() {
cout << "Выберите процедуру:" << endl;
cout << "1)Создание файла" << endl;
cout << "2)Добавление элемента в конец файла" << endl;
cout << "3)Вывод содержимого файла на экран" << endl;
cout << "4)Удаление элемента из файла" << endl;
cout << "5)Упорядочивание элементов в файле по выбранному признаку" << endl;
cout << "6)Выход" << endl;
int choice;
cin >> choice;
return choice - 1;
}
void CreatingFile(Car_owner* mass, int N, int &n) {
ofstream file("File.txt", ios_base::binary | ios_base::trunc);
if (menu() != 0) {
for (int i = 0; i < n; i++) {
file.write((char*)&mass[i], sizeof(mass[i]));
}
}
file.close();
}
void Adding(Car_owner* mass, int N, int &n) {
cout << "Введите фамилию владельца машины:" << endl;
cin >> mass[n].surname;
cout << "Введите имя владельца машины:" << endl;
cin >> mass[n].name;
cout << "Введите отчество владельца машины:" << endl;
cin >> mass[n].otchestvo;
cout << "Введите телефон владельца машины:" << endl;
cin >> mass[n].telephone;
cout << "Введите город владельца машины:" << endl;
cin >> mass[n].adress.city;
cout << "Введите название улицы владельца машины:" << endl;
cin >> mass[n].adress.street;
cout << "Введите номер дома владельца машины:" << endl;
cin >> mass[n].adress.house;
cout << "Введите номер квартиры владельца машины:" << endl;
cin >> mass[n].adress.flat;
cout << "Введите марку машины владельца:" << endl;
cin >> mass[n].kind;
cout << "Введите номер машины владельца:" << endl;
cin >> mass[n].car_number;
cout << "Введите номер техпаспорта машины владельца:" << endl;
cin >> mass[n].pass_number;
n++;
CreatingFile(mass, N, n);
}
void Output(Car_owner* mass, int N, int &n) {
}
void Removing(Car_owner* mass, int N, int &n) {
}
void Sorting(Car_owner* mass, int N, int &n) {
}
void Exit(Car_owner* mass, int N, int &n) {
exit(0);
}