Wczytanie stanu gry z pliku

0

Witam,
Miałem za zadanie napisanie małej gry planszowej z możliwością zapisu oraz odczytu stanu gry. Sama gra działa. Zapis do pliku z tego co widzę też jest poprawny. Niestety mam problem z wczytaniem danych z pliku do struktury. Oto kod:

struct pole // struktura przechowujaca dane o graczu
{
    char g;
    int pole;
    int punkty;
};

void zapisz_gre(char plansza[100],pole *gracz, int gracze)
{
    ofstream fout("SaveMap");
    for(int i=0;i<100;i++)
    {
        fout << plansza[i] << ";";
    }
    fout.close();
    ofstream plik("SaveData");
    for(int i=0;i<gracze;i++)
    {
        plik << gracz[i].g << ";" << gracz[i].pole << ";" << gracz[i].punkty << ";";
    }
    plik.close();
}

void wczytaj_gre(char plansza[100], pole *gracz, int gracze)
{
    ifstream fin("SaveMap");
    char ch;
    int i=0;
    while(fin.get(ch))
    {
        if(ch!=';')
        {
            plansza[i]=ch;
            i++;
        }
    }
    fin.close();
    int licznik=0;
    ifstream plik("SaveData");
    for(int i=0;i<gracze;i++)
    {
        while(licznik<3 and plik.get(ch))
        {
            if(ch!=';')
            {
               if(licznik==0)
               {
                   gracz[i].g=ch;
                   licznik++;
               }
               else if(licznik==1)
               {
                   gracz[i].pole=ch;
                   licznik++;
               }
               else if(licznik==2)
               {
                   gracz[i].punkty=ch;
                   licznik++;
               }
            }
        }
        licznik=0;
    }
    plik.close();
}

Jeszcze przykładowy plik z zapisaną strukturą "SaveData" a-nick, 20-aktualne pole,0-ilość punktów itd. w zależności od ilości graczy

a;20;0;b;33;3;

Samo wczytanie planszy(tablicy) jest poprawne tylko wczytanie danych o do struktury się gdzieś sypie. Zapewne jakiś głupi błąd zrobiłem ale siedzę już nad tym tyle czasu, że nie mogę go znaleźć.

Z góry dziękuje za pomoc.

0

bo źle wczytujesz! Ty masz dla graczy zapisane zapisane coś takiego:

a;123;0;b;34;2;c;24555;2234;

Część odpowiedzialną za pole i punkty wczytujesz jako jeden znak a to ma być liczba złożona z wielu znaków!

Nazewnictwo to masz strasznie pomieszane!

istream & wczytajGracza(istream &inputs, pole *gracz)
{
    assert(pole);
    inputs.get(gracz->g);
    char ch;
    inputs.get(ch);
    assert(ch==';');
    inputs >> gracz->pole;
    inputs.get(ch);
    assert(ch==';');
    inputs >> gracz->punkty;
    inputs.get(ch);
    assert(ch==';');
    return inputs;
}
0

O jezu racja. Zapomniałem, że to wczytywanie, które robiłem odbywa się znak po znaku. Wstyd... W każdym razie dziękuje za pomoc.

Co do kodu wiem, że nie jest zbyt przejrzysty właśnie przez byle jakie nazwy zmiennych, ale nie chciało mi się zbytnio bawić, żeby było ładnie i przejrzyście. W razie czego mam komentarze i orientuje się co jak działa.

Mógłbyś przybliżyć działanie tego? Operacji na plikach jeszcze nie przerabiałem, więc robię to trochę orientacyjnie i nie znam prawie żadnych funkcji do tego. Gdzie tu deklaruje z jakiego pliku wczytuje dane? Jakie biblioteki oprócz istream będą mi potrzebne? Sama składnia też mogłaby być trochę objaśniona.

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