c++ odczyt danych z pliku

0

W jaki sposób można odczytać całą linijkę z pliku za pomocą getline? Zamiescilem kod z zadania ponizej. Chce, żeby mozna bylo odczytac z pliku nazwy oddzielone spacją, a nie jeden wyraz.

#include <iostream>
#include <string>
#include <windows.h>
#include <fstream>
#include <cstdlib>

using namespace std;

ifstream infile;


struct pole
{
    string nazwisko;
    double kwota = 0;
};

int main()
{
    cout << endl;
    cout << " Podaj nazwe pliku z danymi: ";
    char filename[50];
    cin.getline(filename, 50);
    infile.open(filename);

    if (!infile.is_open())
    {
        cout << " Otwarcie pliku nie powiodlo sie. " << endl;
        cout << " Program zostanie zakonczony. " << endl << endl;
        exit(EXIT_FAILURE);
    }

    int i = 0;

    cout << endl;
    cout << " Podaj liczbe wplacajacych: ";
    int ilosc;
    infile >> ilosc;
    system("cls");

    pole* pd = new pole[ilosc];

    while (i < ilosc)
    {
        cout << endl;
        cout << " Podaj nazwisko: ";
        getline(infile, pd[i].nazwisko);
        cout << " Podaj kwote: ";
        infile >> pd[i].kwota;        
        i++;
        system("cls");
    }
    

    system("cls");

    string* wspanialysponsor = new string[ilosc];
    string* sponsor = new string[ilosc];

    int sprawdz = 0;
    int sprawdz1 = 0;

    int j = 0, k = 0;
    i = 0;

    while (i < ilosc)
    {
        if (pd[i].kwota >= 10000)
        {
            wspanialysponsor[j] = pd[i].nazwisko;
            j++;
            sprawdz = 1;
            i++;

        }

        else if (pd[i].kwota < 10000)
        {

            sponsor[k] = pd[i].nazwisko;
            k++;
            sprawdz1 = 1;
            i++;

        }

    }

    int z = 0;

    cout << " Nasi wspaniali sponsorzy: ";
    if (sprawdz == 0)
    {
        cout << endl;
        cout << "brak";
        cout << endl;
    }

    while (z < j)
    {
        cout << endl;
        cout << wspanialysponsor[z] << endl;

        z++;

    }
    cout << endl;
    cout << " Nasi sponsorzy: ";
    if (sprawdz1 == 0)
    {
        cout << endl;
        cout << "brak";
        cout << endl;
    }

    z = 0;
    while (z < k)
    {

        cout << endl;
        cout << sponsor[z] << endl;
        z++;

    }

    delete[] pd;
    delete[] wspanialysponsor;
    delete[] sponsor;

    infile.close();
    return 0;
}

Przykładowe dane pliku:
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000

1

Wpadłeś w standardową pułapkę używania std::getline zaraz po użyciu operator>>.
Zwróć uwagę, że infile >> ilosc; wczyta liczbę i zostawi wszystkie znaki po liczbie nietknięte, w tym znak końca linii.
Ergo następny std::getline nie wczytuje tego czego oczekujesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1