Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Lukutaulukon tallennus ja lataus

terabyte [09.02.2013 15:13:58]

#

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;
}

Metabolix [09.02.2013 15:21:35]

#

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.

terabyte [09.02.2013 15:30:32]

#

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 :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta