Вызвано исключение: нарушение доступа для записи. _Left было 0xB8B7934B. Код должен был записывать учетные записи в файл
Ломается после первого getline.Я менял код на //cin >> klienti[i].Familiy и cin.getline(klienti[i].Familiy, 50) при cin исправляет ошибку в этом месте,но со следующим getline снова ломается.Ещё не пробовал полностью заменить getline-ы мало-ли есть более оптимальный вариант.
И код сломался после добавления void vivod_cheloveka() до этого функция ввода людей работала окей.
#include <iostream>
#include <conio.h>
#include <string>
#include <stdlib.h>
#include <Windows.h>
#include <fstream>
#include <istream>
using namespace std;
void Menu();
//void vivod_cheloveka();
int num;
struct bank
{
string Familiy;
//char Familiy;
string Imia;
string otchestvo;
string tip_vklady;
string valuta;
int vklad;
}*klienti = new bank[num];
void Menu()
{
cout << " Що ви хочете зробити" << endl;
cout << "1)Подивитись інформацію кліента." << endl;
cout << "2)Вивести увесь список." << endl;
cout << "3)Редагувати клієнта. " << endl;
cout << "4)Видалити клієнта." << endl;
cout << "5)Вийти з программи." << endl;
}
int main()
{
//const int n = 1;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Ukr");
int x = 1;
do
{
cout << "Введіть кількість клієнтів" << endl;
cin >> num;
if (cin.fail())
{
cin.clear();
cin.ignore(32767, '\n');
cout << "Помилка!Введіть число." << endl;
continue;
}
if (num <= 0)
cout << "Кількість клієнтів не може бути менше 1" << endl;
} while (num <= 0);
cin.ignore(32767, '\n');
cout << "\nВведіть інформацію про клієнтів:";
for (int i = 0; i < num; i++)
{
cout << "\nКлієнт №" << i + 1 << ":";
cout << "\nВведіть Фамілію:";
getline(cin, klienti[i].Familiy);
//cin.getline(klienti[i].Familiy, 50);
//cin >> klienti[i].Familiy;
cout << "\nВведіть Ім'я:";
getline(cin, klienti[i].Imia);
cout << "\nВведіть ім'я по батькові:";
getline(cin, klienti[i].otchestvo);
cout << "\nВведіть тид вкладу:";
getline(cin, klienti[i].tip_vklady);
cout << "\nВведіть валюту вкладу:";
getline(cin, klienti[i].valuta);
do
{
cout << "\nВведіть сумму вкладу:";
cin >> klienti[i].vklad;
if (cin.fail())
{
cin.clear();
cin.ignore(32767, '\n');
cout << "Помилка!Спробуйте ввести вклад заново" << endl;
continue;
}
if (klienti[i].vklad <= 2)
cout << "Вклад не може бути менше 2 грн/доларів/євро ." << endl;
} while (klienti[i].vklad <= 2);
cout << endl;
cin.ignore(32767, '\n');
}
ofstream spisok("Облік_вкладів.txt");
if (!spisok)
{
cout << "\nФайл неможливо відкрити для зчитання!";
}
for (int i = 0; i < num; i++)
{
spisok << "Клієнт №" << i + 1 << ":";
spisok << "\nФамілія,Ім'я,ім'я по батькові:" << klienti[i].Familiy << klienti[i].Imia << klienti[i].otchestvo;
spisok << "\nТип вкладу:" << klienti[i].tip_vklady;
spisok << "\n Вклад та валюта вкладу:" << klienti[i].vklad << " " << klienti[i].valuta;
}
Menu();
int choice;
int flag = true;
do
{
while (flag)
{
cin >> choice;
if (choice >= 1 || choice <= 5)
flag = false;
else
{
cout << "Ви ввели некоректне значення";
}
}
flag = true;
switch (choice)
{
case 1:
vivod_cheloveka();
Menu();
break;
case 2:
/*vivod_spiska();
Menu();
break;*/
case 3:
Menu();
break;
case 4:
Menu();
break;
case 5:
exit(5);
break;
default:
cout << "Виберіть один з можливих варіантів" << endl;
Menu();
}
}while (x);
}
void vivod_cheloveka()
{
cout << "\n Якого клієнта ви хочете подивитись?";
for (int i = 0; i < num; i++)
{
cout << "\nКлієнт №" << i + 1 << klienti[i].Familiy;
}
int p;
cin >> p;
cout << "\nКлієнт №" << p;
ifstream spisok("Облік_вкладів.txt");
if (!spisok)
{
cout << "Вибачте, щось пішло не так.Не вдалося відкрити файл для читання!";
}
while (spisok)
{
string spisVivvod;
getline(spisok, spisVivvod);
cout << spisVivvod << endl;
}
}