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; }
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 markkamaara
n arvo on edelleen merkityksetön.
no miten sais sen toimii
Eli siis sijoita muuttujan 'jees' tulos muuttujaan 'markkamaara' vasta 'jees' muuttujan lukemisen jälkeen.
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...
Kiitos nyt toimii :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.