Kłopot z wczytaniem dwóch słów z pliku txt

0

Witam. Program polega na wczytaniu liczby sponsorów, później nazwy sponsora i kwoty. A więc plik txt wygląda tak:

4
xxx yyy
1500
xxx yyy
10000

i tak do 4 par. Problemem jest

  plik >> wsk[i].nazwa;

. Wszystko działa dobrze, jeżeli nazwa sponsora składa się tylko z jednego słowa. Próbowałem użyć getline(xxx,yyy) ale nie wiem jak konkretnie ma to wyglądać. Liczę na to, że pokażecie mi jak to powinno wyglądać.

#include <iostream>
#include <fstream>

struct sponsor
{
    std::string nazwa;
    double kwota;
};

int main()
{
using namespace std;
fstream plik;
int sponsorzy;

plik.open("tekst.txt");

plik >> sponsorzy;
sponsor *wsk = new sponsor[sponsorzy];

int i = 0;
while(plik.good())
{
    plik >> wsk[i].nazwa;
    plik >> wsk[i].kwota;
    i++;
}
for(int i = 0 ; i < sponsorzy; i++)
{
    cout << wsk[i].nazwa << " " << wsk[i].kwota << endl;
}
return 0;
}

dodanie znacznika <code> dla zawartości pliku - Furious Programming

0
for(int i=0;i<sponsorzy;++i) if(!(plik>>ws>>wsk[i].nazwa>>wsk[i].kwota)) cerr<<"Błąd odczytu wiersza "<<(i+1)<<endl;
0

Wstawiłem to co dałeś i dalej źle mi pokazuje, bo pokazuje tylko imie, bez nazwiska. Może ja to źle wytłumaczyłem. Chcę żeby program odczytał z pliku np.

2
Jan Kowalski
2000
Jan Nowak
4000

Chcę żeby imię i nazwisko było w jednej zmiennej.

a mi cały czas wyświetla tylko imię i kwotę, bez nazwiska.

dodanie znacznika <code> - Furious Programming

0
for(int i=0;i<sponsorzy;++i) if(!(getline(plik>>ws,wsk[i].nazwa)>>wsk[i].kwota)) cerr<<"Błąd odczytu wiersza "<<(i+1)<<endl;
0
mczebanyk napisał(a):

Próbowałem użyć getline(xxx,yyy) ale nie wiem jak konkretnie ma to wyglądać.

string nazwa;
getline(cin, nazwa);

jeśli wcześniej używałeś cin na liczbach to wiedz, że cin wczytując liczbę zostawia białe znaki, jedno z mozliwych rozwiazan:

#include <sstream>
...
stringstream ss;
string currentline;
// całe wczytywanie jedziesz tym szablonem:
// string nazwa (tak wczytujesz stringi)
getline(cin, nazwa);
// int aaa (tak wczytujesz liczby)
getline(cin, currentline);
ss.str(currentline);
ss >> aaa >> aaa; // wczytuje tylko z aktualnej linii, jesli linia ma dwa inty to dwa razy, jesli jednego to raz
0

Mój kod wygląda tak:

#include <iostream>
#include <fstream>

struct sponsor
{
    std::string nazwa;
    double kwota;
};

int main()
{
using namespace std;
fstream plik;
int sponsorzy;

plik.open("tekst.txt");

plik >> sponsorzy;
plik.get();
sponsor *wsk = new sponsor[sponsorzy];

int i = 0;
while(plik.good())
{
    getline(plik, wsk[i].nazwa);
    plik >> wsk[i].kwota;
    plik.get();
    i++;
}
for(int i = 0 ; i < sponsorzy; i++)
{
    cout << wsk[i].nazwa << " " << wsk[i].kwota << endl;
}
return 0;
}
 

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