PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : If-Else Frage



Pr1Me
10.12.2008, 12:48
Hallo,

ich habe vor kurzem angefangen C++ zu lernen.
Ich habe einen kleinen Rechner gemacht, natürlich
auf niedrigstem Niveu xD

Mein Problem ist, dass wenn ich Rechenart 1,2,3 wähle, nach dem
Ausgeben des Ergebnisses immer das else auch noch ausgegen wird.

Else sollte doch nur ausgegeben werden, wenn man eine falsche Eingabe tätigt....

Bei Rechenart 4 wird das Else nicht ausgegeben.


Source:


#include <cstdlib>
#include <iostream>
#include <math.h>
#include <cstdio>
#include <string>
#define PI 3.14159265

using namespace std;

int main(int argc, char *argv[])
{

string rezeichen;
int zahl1, zahl2;

cout <<"Bitte geben Sie die Nummer der Rechenart ein, mit welcher Sie rechnen wollen:" << endl;
cout <<"1 Plus" << endl;
cout <<"2 Minus" << endl;
cout <<"3 Geteilt" << endl;
cout <<"4 Mal" << endl;
cout << endl;
cout <<"Eingabe: ";
cin >> rezeichen;

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}

system("PAUSE");
return EXIT_SUCCESS;
}

Und noch eine kleine Fragen, wenn man mit einer Rechnung fertig ist, würd ich gerne wieder zum Anfang der Codes springen, dass der Benutzer wieder von vorne anfangen kann, ist das Möglich?

Mfg.

mo0wm
10.12.2008, 13:18
Das else bezieht sich ja auch nur den letzten if-Block. So wird der else Block immer ausgeführt, wenn die Eingabe ungleich 4 ist, was ja immer der Fall ist, wenn du 1,2 oder 3 (letzte Chance! Und ob ihr richtig steht, seht ihr wenn das Licht angeht!) eingegeben hast.

Du musst vor jedem if ein else hinzufügen.
Also "else if" . Nur das erste if bleibt normal, da dies ja sozusagen die "Startbedingung" ist.

Wesentlich einfacher wäre es übrigens, wenn du ein switch-Konstrukt verwenden würdest...
http://tutorial.schornboeck.net/switch.htm

Bi0sh0k
10.12.2008, 13:20
Steig auf C# um. Is einfacher. XD

mo0wm
10.12.2008, 13:26
Steig auf C# um. Is einfacher. XD
Was soll das denn heißen? Hast du immer so wenig Ehrgeiz, wenn was nicht klappt? Wenn ja dann solltest du von C# auf Batch-Script umsteigen...-.-

The Blubb
10.12.2008, 14:52
mach anstat if else eine switch anweisung (www.google.ch)

Pr1Me
10.12.2008, 16:56
Ja ich Schlaumeier wollte immer Switch+Strings benutzen, was ja nicht ging, deswegen hatte ich IF genommen^^

Nun sind mir doch noch die Chars eingefallen :D:D

Hab nurnoch Probleme mit dem Continue, so gehts nicht:



#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
char rechenart;
int zahl1, zahl2;


cout << "Mit welcher Rechenart wollen Sie rechnen?" << endl;
cin >> rechenart;

if (rechenart == ('+' || '-' || '/' || '*') )
{
switch (rechenart)
{
case '+':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 + zahl2 << endl;
break;

case '-':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 - zahl2 << endl;
break;
case '/':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 / zahl2 << endl;
break;
case '*':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 * zahl2 << endl;
break;
}
}

else
{
cout <<"Bitte geben Sie +,-,/ oder * ein!" << endl
continue;
}

system("PAUSE");
return EXIT_SUCCESS;
}

Und so auch nicht:


#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
char rechenart;
int zahl1, zahl2;



cout << "Mit welcher Rechenart wollen Sie rechnen?" << endl;
cin >> rechenart;


switch (rechenart)
{
case '+':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 + zahl2 << endl;
break;

case '-':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 - zahl2 << endl;
break;
case '/':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 / zahl2 << endl;
break;
case '*':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 * zahl2 << endl;
break;
default:
cout<<"Bitte geben Sie +,-,/ oder * ein!" << endl;
continue;
}


system("PAUSE");
return EXIT_SUCCESS;
}



Danke

Darkraiser
10.12.2008, 17:03
#include <stdafx.h>
#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
char rechenart;
int zahl1, zahl2;
bool nochmal = true;
do
{
system("cls");
cout << "Mit welcher Rechenart wollen Sie rechnen?" << endl;
cin >> rechenart;



switch (rechenart)
{
case '+':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 + zahl2 << endl;
break;

case '-':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 - zahl2 << endl;
break;
case '/':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 / zahl2 << endl;
break;
case '*':
cout <<"Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout <<"Bitte geben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Das Ergebnis: " << zahl1 * zahl2 << endl;
break;
default:
cout<<"Bitte geben Sie +,-,/ oder * ein!" << endl;
}
} while (nochmal = true);

system("PAUSE");
return EXIT_SUCCESS;
}


so funktioniert alles wuuunderbar ;)
have fun

mfg

-[RiDER]-
11.12.2008, 20:40
Hi :D

so funktioniert alles wuuunderbar ;)
Ich erkenne nichts weiter, als eine Endlosschleife, und davon noch eine sehr wundersame Umsetzung. :shock:

Bei while (nochmal = true) sollte eigentlich jeder moderne Compiler zumindest eine Warnung ausgeben!
while((nochmal = true)) wäre korrekt für die Zuweisung, while(nochmal == true) für den Vergleich. Dein Zwischending ist ungewöhnlich.

GreetZ RiDER :D :D :D

mo0wm
12.12.2008, 14:08
Außerdem ist ein "continue" nur bei Schleifen sinnvoll. Ein "continue" sorgt dafür, dass eine Schleife nochmal ausgeführt wird. Ein "break" bricht die ganze Schleife ab. Bei einem "switch"-Block bricht es den Block ab...

Darkraiser
12.12.2008, 14:50
jojo ich hab ja auch nur seinen Code übernommen und kurz was hinzugefügt damit es funtzt, nicht mehr ... wollte mir da keinen stress schieben ^^... und des mit dem == wundert mich grade auch ziemlich oO ... war Visual Studio 2008 .. und solche fehler passieren öfters dürfen aber nich compiliert werdn -.- naja whatever es hat gefuntzt ^^

mfg

Schlurmann
12.12.2008, 17:34
Natürlich dürfen sie compiliert werden, man kann genauso auch Anweisungen hinter einem if ausführen.

eRaSeR!
12.12.2008, 17:42
ich frag mich nur wieso du so viele libraries benutzt
iostream reicht doch... math brauchst auch nich du rechnest ja nur mit + - / und *

Deathskull
12.12.2008, 18:16
Hallo,

Mein Problem ist, dass wenn ich Rechenart 1,2,3 wähle, nach dem
Ausgeben des Ergebnisses immer das else auch noch ausgegen wird.
Else sollte doch nur ausgegeben werden, wenn man eine falsche Eingabe tätigt....
Bei Rechenart 4 wird das Else nicht ausgegeben.

Und noch eine kleine Fragen, wenn man mit einer Rechnung fertig ist, würd ich gerne wieder zum Anfang der Codes springen, dass der Benutzer wieder von vorne anfangen kann, ist das Möglich?

Mfg.

So als Weihnachtsgeschenk erkläre ich dir deinen Fehler mal ausführlich :)
Die Else Abfrage gilt immer nur zur Vorherigen If Abfrage, ich hab beide mal Rot Markiert in deinem Post:



Source:

Anfang:;

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}


Dies könntest du mit 2 Sachen umgehen. Beide Lösungen biete ich dir jetzt hier mal an:

1) Bei der ersten frage ich zuerst ab, ob eine 1 ODER eine 2 ODER eine 3 ODER eine 4 eingegeben wurde. Ist dich nicht der Fall wechselt er zum else, ist dies der Fall, schaut er nun genau hin, was eingegeben wurde.



Source:

if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

{

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}


2) Bei meiner 2ten Möglichkeit gehe ich "besser" bzw. übersichtlicher vor. Ich benutze die switch-case Anwendung. Mit dem Befehl "switch ( Die zu prüfende Variable )" kannst du bestimmen, welche Variable überhaupt abgeprüft wird. Danach kommen in geschweifte Klammern die cases (beliebig viele mögliche Fälle + ein default Fall).




Source:

switch (rezeichen)
{

case 1:
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
break;


case 2:
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
break;


case 3:
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
break;


case 4:
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
break;

default:
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
break;
}



So nun komme ich zu deiner Frage, wie man wieder zum Anfang des Programmes gelangen kann. Auch dazu gibt es zahllose Varianten, aber ich erkläre dir hier jetzt mal die einfache goto-Variante, die für einfache, kleinere Projekte geeignet ist, jedoch nicht für größere und die Variante, mit einer Schleife.

1) Goto:

"Name":;
goto "Name";

Mit diesen einfachen Befehlen kann man eigentlich im ganzen Codeblock rumspringen :D
Ich warne hiervor aber noch einmal, dies ist bei größeren Projekten nicht gut, da man damit jegliche Absicherungen die einen C++ bietet ignoriert!



Source:

Anfang:;

if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

{

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}



char achegal;
cout << "Wollen sie das ganze nochmal wiederholen? (j/n)" << endl;
cin >> achegal;

if (achegal == 'j') goto Anfang;



2) Schleifen:

Es gibt unterschiedliche Typen von Schleifen, einmal die while(do-while) - Schleife und die for - Schleife. Eine Schleife arbeitet im Prinzip einfach, sie prüft etwas ab, und solange dies nicht eintrifft, fängt sie von vorne an und es passiert etwas ( wenn nichts passiert, würde die Schleife ja immer wieder von vorne Anfangen -> eine Endlosschleife).



Source:


do
{


if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

{

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}




char Anfang;
cout << "Wollen sie nochmal von Vorne beginnen? (j/n)" << endl;
cin >> Anfang;

} while ( Anfang == 'j')




So jetzt habe ich genug geschrieben. Wenn du diesbezüglich noch was Wissen möchtest, kannst du mich ja anschreiben. Hoffe aber, ich habe es verständlich erklärt :)

MfG Blood

Added after 35 seconds:


Hallo,

Mein Problem ist, dass wenn ich Rechenart 1,2,3 wähle, nach dem
Ausgeben des Ergebnisses immer das else auch noch ausgegen wird.
Else sollte doch nur ausgegeben werden, wenn man eine falsche Eingabe tätigt....
Bei Rechenart 4 wird das Else nicht ausgegeben.

Und noch eine kleine Fragen, wenn man mit einer Rechnung fertig ist, würd ich gerne wieder zum Anfang der Codes springen, dass der Benutzer wieder von vorne anfangen kann, ist das Möglich?

Mfg.

So als Weihnachtsgeschenk erkläre ich dir deinen Fehler mal ausführlich :)
Die Else Abfrage gilt immer nur zur Vorherigen If Abfrage, ich hab beide mal Rot Markiert in deinem Post:



Source:

Anfang:;

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}


Dies könntest du mit 2 Sachen umgehen. Beide Lösungen biete ich dir jetzt hier mal an:

1) Bei der ersten frage ich zuerst ab, ob eine 1 ODER eine 2 ODER eine 3 ODER eine 4 eingegeben wurde. Ist dich nicht der Fall wechselt er zum else, ist dies der Fall, schaut er nun genau hin, was eingegeben wurde.



Source:

if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

{

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}


2) Bei meiner 2ten Möglichkeit gehe ich "besser" bzw. übersichtlicher vor. Ich benutze die switch-case Anwendung. Mit dem Befehl "switch ( Die zu prüfende Variable )" kannst du bestimmen, welche Variable überhaupt abgeprüft wird. Danach kommen in geschweifte Klammern die cases (beliebig viele mögliche Fälle + ein default Fall).




Source:

switch (rezeichen)
{

case 1:
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
break;


case 2:
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
break;


case 3:
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
break;


case 4:
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
break;

default:
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
break;
}



So nun komme ich zu deiner Frage, wie man wieder zum Anfang des Programmes gelangen kann. Auch dazu gibt es zahllose Varianten, aber ich erkläre dir hier jetzt mal die einfache goto-Variante, die für einfache, kleinere Projekte geeignet ist, jedoch nicht für größere und die Variante, mit einer Schleife.

1) Goto:

"Name":;
goto "Name";

Mit diesen einfachen Befehlen kann man eigentlich im ganzen Codeblock rumspringen :D
Ich warne hiervor aber noch einmal, dies ist bei größeren Projekten nicht gut, da man damit jegliche Absicherungen die einen C++ bietet ignoriert!



Source:

Anfang:;

if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

{

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}



char achegal;
cout << "Wollen sie das ganze nochmal wiederholen? (j/n)" << endl;
cin >> achegal;

if (achegal == 'j') goto Anfang;



2) Schleifen:

Es gibt unterschiedliche Typen von Schleifen, einmal die while(do-while) - Schleife und die for - Schleife. Eine Schleife arbeitet im Prinzip einfach, sie prüft etwas ab, und solange dies nicht eintrifft, fängt sie von vorne an und es passiert etwas ( wenn nichts passiert, würde die Schleife ja immer wieder von vorne Anfangen -> eine Endlosschleife).



Source:


do
{


if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

{

if ( rezeichen == "1" )
{
cout << "Bitte geben Sie Zahl 1 ein: ";
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: ";
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
}

if ( rezeichen == "2" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
}

if ( rezeichen == "3" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
}

if ( rezeichen == "4" )
{
cout << "Bitte geben Sie Zahl 1 ein: " << endl;
cin >> zahl1;
cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
cin >> zahl2;
cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
}

}

else
{
cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
}




char Anfang;
cout << "Wollen sie nochmal von Vorne beginnen? (j/n)" << endl;
cin >> Anfang;

} while ( Anfang == 'j')




So jetzt habe ich genug geschrieben. Wenn du diesbezüglich noch was Wissen möchtest, kannst du mich ja anschreiben. Hoffe aber, ich habe es verständlich erklärt :)

MfG Blood

eRaSeR!
12.12.2008, 18:25
kleiner fehler:


Source:

Anfang:;

das ; is doch überflüssig oder nich??

ja ich rate dir auch von goto ab aber falls es nich anderst weißt oder ab und zu doch machst mach hinter goto Anfang; // nen kommentar wo zb steht zeile 12 oder was auch immer... also da wos hin geht
weil mit goto kannst quer durchs prog springen. also großes chaos^^

-[RiDER]-
12.12.2008, 18:41
Hi :D

mit goto kannst quer durchs prog springen.
Nein, kannst Du nicht.
Du kannst quer durch eine Funktion springen.

Mit setjmp() und longjmp() lässt sich diese Barriere sprengen, jedoch kann man nur in Teile des Programms springen, die bereits ausgeführt wurden (und an denen dabei mit setjmp() eine Sprungstelle definiert wurde).

EDiT:
Allerdings sollte diese Möglichkeit für nichts mehr als zur Fehlersuche genutzt werden und gilt als Unsitte!
Genau wie goto erschwert das die Wartung des Kodes sehr stark und ist fehlerträchtig!

GreetZ RiDER :D :D :D