Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Virhe koodissa

ItEliasPro [04.02.2011 07:54:05]

#

Kun suoritan ohjelman toiminto2() funktion konsolissa se laittaa nollia tuloksen
perään ja vastauskin on väärin osaisko joku auttaa?

//(c)Html-guy 2011

#include <iostream>

char piste = '.';
using namespace std;

class toiminto
{
	public:
	int eurot;
    long sentit;
	void toiminto1() {
	cout << "Laita euro määrä." << endl;
	cin >> eurot;
	cout << "\nLaita nyt sentit." << endl;
	cin >> sentit;
	cout << "Tulos on:" << endl;
	cout << eurot;
	cout << piste;
	cout << sentit;
	cout << " Euroa";
    }
    void toiminto2() {
	 int jees;
     int markkamaara = jees;
	 cout << "Laita Eurot" << endl;
	 cin >> jees;
	 cout << "Euroa on:\n";
	 cout << markkamaara*6 << " markkaa" << endl;
	}
};

int main()
{
	toiminto olio;
	char valinta;
	cout << "Tervetuloa rahan laskemis ohjelmaan :)" << endl;
	cout << "Laita y jos haluat laskea eurot ja sentit yhteen.\nLaita m jos haluat kääntää eurot markoiksi." << endl;
	cin >> valinta;
	if (valinta == 'y') {
	olio.toiminto1();
    }

    else if (valinta == 'm') {
    olio.toiminto2();
	}

	else {
	cout << "ERROR:Laita y tai m!";
	return 39;
	};
	cout << "\nKiitos kun käytit rahan laskemis ohjelmaa.\n(c)Html-guy 2011";
	return 0;
}

jlaire [04.02.2011 08:05:52]

#

void toiminto2() {
	int jees;
	int markkamaara = jees;

Molempien muuttujien arvo on tässä kohdassa täysin satunnainen.

	cin >> jees;
	cout << markkamaara*6 << " markkaa" << endl;
}

Et käytä lukemaasi arvoa mihinkään, ja markkamaaran arvo on edelleen merkityksetön.

ItEliasPro [04.02.2011 08:28:21]

#

no miten sais sen toimii

Teuro [04.02.2011 10:28:24]

#

Eli siis sijoita muuttujan 'jees' tulos muuttujaan 'markkamaara' vasta 'jees' muuttujan lukemisen jälkeen.

Torgo [04.02.2011 12:01:40]

#

Kirjoitan koodikommenttina selitykset mitä seuraavilla riveillä tapahtuu.

/* Käsketään kääntäjää varaamaan muistista tilaa kokonaisluvulle.
 * Tätä kokonaislukua ei alusteta mihinkään arvoon, vaan arvoksi
 * tulee se mitä kyseisessä muistipaikassa sattuu sillä hetkellä olemaan.
 * Tähän satunnaiseen arvoon voidaan koodissa viitata nimellä jees.
 */
int jees;
/* Muuten sama kuin edellä, mutta nyt muistipaikan varaamisen lisäksi
 * satunnainen arvo jees sijoitetaan myös markkamäärän arvoksi.
 * Tämä ei siis tarkoita että jees ja markkamäärä olisivat nyt samoja.
 * Ne ovat erillisiä muutujia muistiavaruudessa. Ainoastaan niiden arvot
 * ovat samoja. Eli jos muutat toisen arvoa, niin toinen pysyy muuttumattomana.
 */
int markkamaara = jees;

Voit ajatella tuon koodisi vaikka niin, että sinulla on kaksi henkilöä A (jees) ja B (markkamaara). Kummankaan rahatilanteesta sinulla ei ole hajuakaan. Sitten kysyt henkilöltä A paljonko hänellä on euroja (cin >> jees;). Sen jälkeen väität että hänellä on rahaa markkoina 6 kertaa niin paljon, kuin henkilöllä B (cout << markkamaara*6 << " markkaa" << endl;). Miten se on mahdollista, kun sinulla ei ole hajuakaan paljonko B:llä on rahaa?

Toivottavasti pitkä selitykseni ei sekoittanut kovin pahasti, mutta eikö sinunkin mielestäsi henkilö B ole täysin turha tässä koko kuviossa. Ei hänen rahoillaan ole mitään tekemistä koko jutussa. Lisäksi funktiot kannattaa opetella nimeämään alusta alkaen kuvaamaan sitä mitä ne tekevätkin. Tässä krjattu versio ilman B:tä.

void eurot_markoiksi() {
 int euroja;
 cout << "Laita Eurot" << endl;
 cin >> euroja;
 cout << "Euroa on:\n";
 cout << euroja*6 << " markkaa" << endl;
}

Toinen mihin kannattaa pikaisesti tutustua on funktioiden parametrit ja paluuarvo, mutta yksi asia kerrallaan...

ItEliasPro [04.02.2011 12:28:59]

#

Kiitos nyt toimii :)

Vastaus

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

Tietoa sivustosta