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

Problem z załadowaniem wartości struktury z pliku

Ostatnio zmodyfikowano 2014-01-16 08:03
Autor Wiadomość
chitler
Temat założony przez niniejszego użytkownika
Problem z załadowaniem wartości struktury z pliku
» 2014-01-15 18:02:26
Napisałem program, w którym można dodawać elementy do tablicy dynamicznej vector, są one automatycznie dopisywane do pliku txt, lecz mam problem żeby odczytać te wartości przy nowym uruchomieniu programu. Elementami tablicy są struktury o dwóch polach string i int. Jak napisać funkcję load? Dopiero zaczynam operacje na plikach.

C/C++
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
using namespace std;

int licznik = 0;

struct rekord
{
    //public:
    string nazwa;
    int numer;
   
    rekord( string nazwa, int numer );
};

rekord::rekord( string xnazwa, int xnumer )
    : nazwa( xnazwa )
    , numer( xnumer )
{
}
void addperson( vector < rekord >& tablica )
{
    //static int licznik = 0;
    string nazwa;
    int numer;
    cout << "podaj nazwe: "; cin >> nazwa;
    cout << "podaj numer: "; cin >> numer;
    tablica.push_back( rekord( nazwa, numer ) );
    cout << "sukces" << endl;
    ofstream strumien( "dane.txt", ios::app );
    if( strumien )
    {
        strumien << tablica[ licznik ].nazwa << endl;
        strumien << tablica[ licznik ].numer << endl;
    }
    else
    {
        cout << "Blad zapisu!" << endl;
    }
    licznik++;
}

void load( vector < rekord >& tablica )
{
    /*ifstream strumien ("dane.txt");
        string nazwa;
        int numer = 0;
        if (strumien)
            {
                strumien.seekg(0, ios::beg);
                getline(strumien,nazwa);
                //getline(strumien,numer);
                tablica.push_back(rekord(nazwa,numer));
   
            }
            else
            {
                cout<<"Blad odczytu!"<<endl;
            }*/
}

void showall( vector < rekord >& tablica )
{
   
    for( int i = 0; i < tablica.size(); i++ )
    {
        cout << "Nazwa: " << tablica[ i ].nazwa << endl;
        cout << "numer: " << tablica[ i ].numer << endl;
    }
}


int main()
{
    vector < rekord > tablica;
   
    do {
        load( tablica );
        addperson( tablica );
        cout << "dodano" << endl;
        showall( tablica );
        cout << "wyswietlono" << endl;
       
       
    } while( true );
   
    return 0;
}
P-102247
alixir
» 2014-01-16 08:03:57
Dane w pliku umieszczone są parami (po 2 linie), więc tak też należałoby je odczytywać.
W sumie widzę, że kombinowałeś w tym kierunku, ale pewnie sypało ci błędami
getline( strumien, numer );

A to dlatego, że dane z pliku pobierane są w postaci tekstu i nie da się ich wrzucić bezpośrednio do zmiennej int.
Musisz posłużyć się pomocniczą zmienną tekstową np.
C/C++
string buff;
getline( strumien, buff );
numer = atoi( buff.c_str() ); // atoi z biblioteki <cstdlib>
P-102288
« 1 »
  Strona 1 z 1