Путем проб и ошибок я пришел тому что cin как то не закрывает поток или что еще и сразу заполняет "\n" следующее поле динамического массива. Подскажите правильно ли я думаю и как например мне сделать считывание перед switch чтобы поле с фамилией можно было заполнить. 42 -44 строчка там я еще комментарии написал.Спасибо
#include<iostream>
#include<windows.h>
using namespace std;
class Sponsor
{
public:
char name[32];
char surname[32];
double sum;
Sponsor (){
cout << "cr"<<endl;
}
~Sponsor (){
cout << "del"<<endl;
}
};
Sponsor* AddStruct(Sponsor* Obj, const int amount);
void setData(Sponsor* Obj, const int amount);
void showData(const Sponsor* Obj, const int amount);
void menu(const int amount);
void editData(Sponsor* Obj){
cout << "Введите порядковый номер записи для редактирования" << endl;
int amount, YesOrNot;
cin >> amount;
cout << "Редактирование записи №" << amount << endl;
setData(Obj, amount - 1);
cout << "Запись отредактирована" << endl;
}
void loadData(const Sponsor* Obj, const int amount);
int main()
{
setlocale(LC_ALL, "rus");
Sponsor* OurSponsors = 0;
int sponsorAmount = 0;
int YesOrNot = 0; // продолжить или остановить ввод данных
int rule = 9; //если прописываю здесь например 1 то срабатывает все нормально программа просит ввести имя а потом фамилию
while (rule != 0){
cin >> rule; // cin.get() тот же эффект программа пропускает воод фамилии а сразу переходит к имени
switch (rule){
case 1://add
{
do
{
OurSponsors = AddStruct(OurSponsors, sponsorAmount);
setData(OurSponsors, sponsorAmount);
sponsorAmount++;
cout << "Продолжить ввод данных (1 - да, 0 - нет): ";
cin >> YesOrNot;
cin.get();
} while (YesOrNot != 0);
break;
}
case 2://edit
{
editData(OurSponsors);
break;
}
case 3://показать
{
showData(OurSponsors, sponsorAmount);
break;
}
case 4: //загрузить
{
break;
}
}
}
delete[] OurSponsors;
return 0;
}
Sponsor* AddStruct(Sponsor* Obj, const int amount)
{
if (amount == 0)
{
Obj = new Sponsor[1]; // выделение памяти для первой структуры
}
else
{
Sponsor* tempObj = new Sponsor[amount + 1];
for (int i = 0; i < amount; i++)
{
tempObj[i] = Obj[i]; // копируем во временный объект
}
delete [] Obj;
Obj = tempObj;
}
return Obj;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void setData(Sponsor* Obj, const int amount)
{
cout << "Фамилия: ";
cin.getline(Obj[amount].surname, 32);
cout << "Имя: ";
cin.getline(Obj[amount].name, 32);
cout << "Сумма пожертвования: ";
cin >> Obj[amount].sum;
cin.get();
cout << endl;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void showData(const Sponsor* Obj, const int amount)
{
system("cls");
cout << "№ " << "Фамилия\t" << "Имя\t" << "Сумма\t" << endl;
cout << "========================================" << endl;
for (int i = 0; i < amount; i++)
{
cout << i + 1 << " " << Obj[i].surname << '\t' << Obj[i].name << '\t' << Obj[i].sum << endl;
}
system("pause");
}
[Тоскливо и устало] после ввода числа с помощью cin >> N
в буфере ввода остаются несчитанные символы (буде такие есть) до конца строки пусть сам конец строки...
Если после этого вы читаете что-то не числовое, грубо говоря, вы считываете пустую строку...
Чтобы этого не было, надо сбросить буфер, например, так:
сin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
(см. тут).
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Мы вводим переменные ,если мы нажмём Enter ,то пустая переменная пропустится и перейдёт ввод к другой переменнойКак сделать в с++ ?
Как можно подключить #include, но сразу ко всему проекту, а не прописывать много раз?
Подскажите как организовать поискНужно выводить следующие, либо предыдущие 10 строк