Top.Mail.Ru
Ответы

Как ввести строку с пробелами в объект string в динамическом массиве структур?

Читаю книгу С. Прата по программированию на C++. Там есть задание, с которым мне под силу справится, за исключением одного момента. Я не пойму как можно сохранить строку в массиве char или объекте string, который находится в структуре, которая находится в динамическом массиве. Я уже пробовал и getline(cin, patrons[i].name), и ещё парочку способов. Ничего рабочего найти на смог.
Вот код:

12345678910111213141516171819202122232425262728293031
 // 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);

Аватар пользователя
Оракул
1234
 patrons[i]->name


patrons[i]->donate 

============
nvm