Как ввести строку с пробелами в объект string в динамическом массиве структур?
Читаю книгу С. Прата по программированию на C++. Там есть задание, с которым мне под силу справится, за исключением одного момента. Я не пойму как можно сохранить строку в массиве char или объекте string, который находится в структуре, которая находится в динамическом массиве. Я уже пробовал и getline(cin, patrons[i].name), и ещё парочку способов. Ничего рабочего найти на смог.
Вот код:
// SPIP.cpp -- Общество защиты влиятельных лиц
#include <iostream>
#include <string>
int main()
{
using namespace std;
struct SPIP
{
string name;
double donate;
};
short numbpatr;
cout << "Specify the number of patrons who have made donations to the Society for the Protection of Influential Persons: ";
cin >> numbpatr;
SPIP * patrons = new SPIP[numbpatr];
cout << "Enter the names and amount of donations of patrons:\n";
for (int i = 0; i < numbpatr; i++)
{
cout << "Patrons #" << i + 1 << "\nName: ";
cin >> patrons[i].name; // злополучное место
cout << "Donation amount: ";
cin >> patrons[i].donate;
}
cout << "Grand Patrons:";
for (int i = 0; i < numbpatr; i++)
{
if (patrons[i].donate >= 10000)
cout << endl << patrons[i].name << ": " << patrons[i].donate;
}
return 0;
}
Решение: Перед getline(cin, patron[i].name); нужно убрать символ новой строки с помощью cin.get();
Проблема заключалась в том, что после "cin >> numbpatr;" во входном потоке остаётся символ новой строки '\n'. Сначала программа спрашивает количество пожертвовавших (cout << "Specify the number of patrons who have made donations to the Society for the Protection of Influential Persons: ";) после чего, мы вводим целочисленное значение и для ввода нажимаем Enter. Именно вот эта зараза и остается во входном потоке. Очистить его можно с помощью "cin.ignore('\n')" или, например, "cin.get()". Программа работает!
перед getline нужно очищать буфер ввода, ибо там остаются символы переноса строки после cin >>.
cin.ignore(1000,'\n');
getline(cin, patrons[i].name);
patrons[i]->name
patrons[i]->donate
============
nvm