Schleife zwischen zwei Funktionen

moin


Hier mal so wie ich es im Prinzip machen würde:
Code:
#include <iostream>
#include <math.h>

using namespace std;

int menu()
{

	int i=0;

	while (1)
	{
		cout << "\n\t<---------Taschenrechner----------->"
			<< "\n\t(1) Addieren"
			<< "\n\t(2) Subtrahieren"
			<< "\n\t(3) Multiplizieren"
			<< "\n\t(4) Dividieren"
			<< "\n\t(5) zum Quadrat nehmen"
			<< "\n\t(6) Quadrat-Wurzel ziehen"
			<< "\n\t<----------------------------------->";

		cin>>i;

		if(i > 0 && i < 7)
			return i;

		else
			cout <<"\n\n\t\tFALSCHE EINGABE";
	}

	return 0;
}

int main() {

	bool quit=false;
	int schluss=0;
	long double a=0, b=0;
	int x=0;
	int auswahl;

	while(1)
	{
		auswahl = menu();

		switch (auswahl)
		{
		case 1:
		case 2:
		case 3:
		case 4:

			cout << "\n\n\tBitte erste Zahl eingeben ";
			cin >> a;
			cout << "\n\n\tBitte zweite Zahl eingeben ";
			cin >> b;
			switch(auswahl)
			{
			case 1: cout << "\n\t" << a << " + " << b << " = " << a + b << endl; break;
			case 2: cout << "\n\t" << a << " - " << b << " = " << a - b << endl; break;
			case 3: cout << "\n\t" << a << " * " << b << " = " << a * b << endl; break;
			case 4: cout << "\n\t" << a << " / " << b << " = " << a / b << endl; break;
			}
			break;

		case 5:
		case 6:
			cout << "\n\n\tBitte Zahl eingeben ";
			cin >> a;
			switch (auswahl)
			{
			case 5: cout << "\n\t" << a << " zum quadrat ist = " << a*a << endl; break;
			case 6: cout << "\n\tDie Wurzel von " << a << " = " << sqrt(a) << endl; break;
			}
			break;
		}

		while(quit == false)
		{
			cout <<"\n(1)Programm beenden\n\toder\n(2)eine weitere Aufgabe rechnen?";
			cin>> x;

			switch(x)
			{
			case 1: return 0;
			case 2: quit = true; break;
			default: cout<<"Falsche Eingabe.";
			}
		}
		quit = false;
	}

	return 0;
	}


mfg
umbrasaxum
 
Danke! Sehr elegant... wär ich wahrscheinlich nie drauf gekommen :). Na ja, ihr habt mir auf jeden Fall sehr geholfen und danke nochmal an alle.
 
Kann mir nochmal einer erklären warum bei dem Quellcode von umbrasaxum die Programmausführung an den Anfang des Programms springt(letzte switch-Schleife).Und warum wird das Programm beendet wenn man vor case 2 noch return 0; zurückgibt(die switch-Anweisung arbeitet doch bis zur break anweisung alles ab oder nicht?)
Sorry bin erst seit kurzem mit cpp zugange...
 
Code:
		while(quit == false)
		{
			cout <<"\n(1)Programm beenden\n\toder\n(2)eine weitere Aufgabe rechnen?";
			cin>> x;

			switch(x)
			{
			case 1: return 0;
			case 2: quit = true; break;
			default: cout<<"Falsche Eingabe.";
			}
		}
		quit = false;

Diese Schleife überprüft die Benutzereingabe. Wenn 1 eingegeben wird, wird das Programm beendet. return bricht die aktuelle Funktion ab und gibt den Wert zurück.
Da ist es egal ob das in einer switch-Anweißung passiert oder nicht.

Wenn eine 2 eingegeben wird, dann wird quit auf true gesetzt. Die Bedingung ist nicht mehr erfüllt und die Schleife bricht ab. Da sich das ganze aber in einer weiteren Schleife befindet ( Endlosschleife ) geht alles wieder von Forne los.
 
Zurück