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.