Zitat Zitat von Pr1Me
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
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:

Zitat Zitat von Pr1Me
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
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