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 markkamaaran 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.