Moro, oon kouluprojektina tehnyt laivanupotus peliä. Nyt iski ongelma tilanteen tallennuksen ja latauksen kanssa tieto kyllä menee tiedostoon, mutta ei palaudu mistä mahtaa kiikastaa....
bool tallenna(int laivat[][PELIALUE], int tilanne[][PELIALUE],int &upotettu) { ofstream ulos; ulos.open("pelitilanne.txt"); for(int i=0;i<PELIALUE; i++) { for(int j=0;j<PELIALUE; j++) { ulos<<laivat[i][j]; } ulos<<"\n"; } for(int i=0;i<PELIALUE; i++) { for(int j=0;j<PELIALUE; j++) { ulos<<tilanne[i][j]; } ulos<<"\n"; } ulos<<upotettu; ulos.close(); return true; } bool lataa(int laivat[][PELIALUE], int tilanne[][PELIALUE], int &upotettu) { ifstream sisaan; sisaan.open("pelitilanne.txt"); sisaan>>noskipws; for(int i=0;i<PELIALUE; i++) { for(int j=0;j<PELIALUE; j++) { sisaan>>laivat[i][j]; } } for(int i=0;i<PELIALUE; i++) { for(int j=0;j<PELIALUE; j++) { sisaan>>tilanne[i][j]; } } sisaan>>upotettu; sisaan.close(); cout<<upotettu; tulosta_pelialue(1, laivat); tulosta_pelialue(1, tilanne); return true; }
Tulosta väli jokaisen luvun jälkeen ja ota pois tuo noskipws. Eihän muuten ole mitenkään mahdollista erottaa peräkkäisiä lukuja eli sitä, mitä lukuja vaikkapa teksti 112 tarkoittaa (1, 1, 2 vai 1, 12 vai 11, 2 vai vain 112), ja C++ lukee silloin mahdollisimman paljon.
Toinen vaihtoehto on vaihtaa int-tyyppi char-tyyppiin, jolloin taulukossa on aina vain yksi merkki kussakin kohdassa ja myös >>-operaattori lukee vain yhden merkin. Silloin joudut vaihtamaan muualta koodista luvut (1) merkeiksi ('1'). Kuitenkin noskipws:n takia joudut lukemaan myös rivinvaihtomerkit itse, kun kerran olet ne tallentanutkin.
Kiitos,
Tein muutokset, mutta ei vieläkään tule kuin ekaan tauluun sen eka luku...
Lisäys: Pieni korjaus ja kyllä se näin toimi erittäin paljon kiitoksia avusta :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.