Wat is er fout aan dit programma

Status
Niet open voor verdere reacties.

melle852

Gebruiker
Lid geworden
5 dec 2011
Berichten
10
Wat is er fout aan dit c++ programma? Het is een reken machine. De compiler is dev-C++


[CPP]
#include <iostream.h>
int main(){
int x,y;
char bericht;
cout <<"Welkom bij de rekenmachine!";
cout <<"\nVul getal 1 in:";
cin >> x;
cout <<"\nVul getal 2 in:";
cin >> y;
cout <<"\nWat wilt u? optellen, aftrekken, delen of keer?";
cin >> bericht;
if(bericht==optellen){
cout << optellen(x,y);
main();
}elseif(bericht==aftrekken){
cout << aftrekken(x,y);
main();
}elseif(bericht==delen){
cout << delen(x,y);
main();
}elseif(bericht==keer){
cout << keer(x,y);
main()
}else{
main();
}
}

int optellen(int x,int y){
int a;
a=x+y;
return a;
}

int aftrekken(int x,int y){
int a;
a=x-y;
return a;
}

int delen(int x,int y){
int a;
a=x/y
return a;
}

int keer(int x,int y){
int a;
a=x*y
return a;
}
[/CPP]
 
je mist een paar ";" bij delen /vermenigvuldigen, maar anders is het wel even handig om meer informatie te geven :p
 
Nou de compiler zegt dus dat if else en elseif undeclared functions zijn.
 
1. Optellen, Aftrekken etc. moet je natuurlijk wel declareren. ;)
2. Het is in dit geval handiger een Switch Case-constructie te gebruiken.
 
en wat doe je dan met de waarde? ook even printen. eerst maar een alles netjes afsluiten!

EDIT en bovendien bevat een char variabel maar een teken.
 
Laatst bewerkt:
Zo:

[CPP]int optellen(int x, int y);
int aftrekken(int x, int y);
int delen (int x, int y);
int keer(int x, int y);[/CPP]

(Onder #Includes... zetten)

Je moet trouwens wel met aanhalingstekens werken voor strings en chars. Een char is trouwens maar één teken. Bericht krijgt er hier meer. Dat is waarschijnlijk een (mede-)boosdoener. ;)
 
Je zou eigenlijk beter kunnen vragen wat er niet fout is aan het programma:

- <iostream.h> is deprecated en zou <iostream> moeten worden
- cout en cin zijn in jouw code onbekend, aangezien deze binnen de namespace std zitten (of je gebruikt een using-directive als 'using namespace std;' of je schrijft het volledig als std::cout en std::cin)
- ook je functies zijn binnen de main functie niet bekend. Je zal hiervoor voor iedere functie een prototype boven de main functie moeten schrijven (of de functies boven de main functie plaatsen)
- zoals al genoemd kan een char maar een enkel teken bevatten en kan je er daarom geen tekenreeks in opslaan. Include daarvoor <string> en verander 'char bericht' naar 'std::string bericht'
- wederom al genoemd moet een string tussen quotes

Verder zijn er nog een aantal dingen die ik zelf anders zou doen. Zoals:

- je main functie blijft zich momenteel recursief aanroepen zonder mogelijkheid om het programma op een normale manier te stoppen. Dat lijkt me niet wenselijk. Ik zou de functionaliteit binnen
de main functie binnen een do-while loop zetten en de gebruiker de keuze geven om het programma te stoppen.
- het if-else if statement vervangen door een switch statement
- de main functie een waarde laten returnen (is overigens niet verplicht volgens de standaard)
- je hebt voor je functies eigenlijk geen variabelen nodig en kunt ook gewoon direct iets als "return x * y;" schrijven

Om je een klein beetje in de juiste richting te helpen:

[cpp]
int add(int, int); // prototype
// ...

int main()
{
bool stop;
int x, y;
std::string message;

do
{
std::cout << "Welkom bij de rekenmachine!\n"
<< "Vul getal 1 in:";
// ...

} while (!stop);

return 0;
}

int add(int x, int y) { return x * y; }
[/cpp]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan