Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] wczytywanie tekstu ze spacją z pliku - getline nie działa...

Ostatnio zmodyfikowano 2017-06-09 18:43
Autor Wiadomość
ws89
Temat założony przez niniejszego użytkownika
[C++] wczytywanie tekstu ze spacją z pliku - getline nie działa...
» 2017-06-09 00:14:42
Dobry wieczór,

mam problem z wczytaniem tekstu ze spacją, z pliku "dane" do zmiennej "gatunek". Próbowałem na różne sposoby, ale coś mi widocznie umyka, ponieważ w miejscu wczytanego tekstu jest puste pole. Mógłby mi ktoś powiedzieć co wpisałem źle? Mile widziane również rozwiązanie z wyjaśnieniem.

Pozdrawiam

C/C++
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>

using namespace std;

struct SElement
{
    int wiek;
    string gatunek;
    double cena;
    SElement * nast;
};

void pisz( SElement * adres )
{
    while( adres )
    {
        cout << "Wiek rosliny : \n";
        cout << adres->wiek << endl;
        cout << "Gatunek rosliny : \n";
        cout << adres->gatunek << endl;
        cout << "Cena rosliny : \n";
        cout << adres->cena << endl;
        adres = adres->nast;
        cout << endl;
    };
};

void dodajelement( SElement *& adres, int wiek, string gatunek, double cena )
{
    SElement * aktualny;
   
    aktualny = new SElement;
    aktualny->wiek = wiek;
    aktualny->gatunek = gatunek;
    aktualny->cena = cena;
    aktualny->nast = adres->nast;
    adres->nast = aktualny;
    adres = aktualny;
   
   
};

int main( int argc, char * argv[] )
{
    SElement * glowa, * aktualny, * ogon;
    char wybor;
   
   
    ifstream dane;
    string nazwa;
    int licznik;
    int wiek;
    string gatunek;
    double cena;
   
    do
    {
        cout << "Z jakiego pliku wczytywac dane?\n";
        cin >> nazwa;
       
        dane.open( nazwa.c_str() );
        if( !dane.good() )
        {
            cerr << "Problem z otwarciem pliku " << nazwa << endl;
           
        };
    } while( !dane.good() );
   
    cout << "Stworzyc liste z danych w pliku ? t/n \n";
    cin >> wybor;
   
   
    if( wybor == 't' )
    {
        glowa = new SElement;
        dane >> glowa->wiek;
        dane >> glowa->gatunek;
        dane >> glowa->cena;
        glowa->nast = NULL;
        ogon = glowa;
       
        cout << "Dodac element do listy ? t/n \n";
        cin >> wybor;
       
        if( wybor == 't' )
             licznik = 1;
       
        while( wybor == 't' )
        {
            dane >> wiek;
            getline( dane, gatunek );
            dane >> cena;
            dodajelement( ogon, wiek, gatunek, cena );
            licznik++;
           
            cout << "Dodac " << licznik + 1 << " element t/n ? \n";
            cin >> wybor;
        };
       
       
       
       
       
       
       
    }
    else
    {
        cout << "Koniec programu";
        exit( 1 );
    };
   
   
   
   
   
    pisz( glowa );
   
   
   
   
    system( "pause" );
    return 0;
}
P-162276
mateczek
» 2017-06-09 13:11:53
pokaż strukturę pliku.
getline pobiera całą linię. Czyli domyślnie do entera, chyba że zdefiniujesz inaczej.

Zakłądając że w pliku masz tak:


koteczek miałczek
dachus pospolitus reks

C/C++
plik >> zwierze >> imie;
plik.ignore(); //pobrać znak końca linii. np poleceniem ignore.
getline( plik, gatunek )
P-162289
j23
» 2017-06-09 17:41:37
...
P-162298
ws89
Temat założony przez niniejszego użytkownika
» 2017-06-09 18:43:50
Plik.ignore() pomogło ! Dziękuję i zamykam temat.
P-162302
« 1 »
  Strona 1 z 1