Natürlich dürfen sie compiliert werden, man kann genauso auch Anweisungen hinter einem if ausführen.
Natürlich dürfen sie compiliert werden, man kann genauso auch Anweisungen hinter einem if ausführen.
Yep, I fap to Reese Witherspoone. :_D
ich frag mich nur wieso du so viele libraries benutzt
iostream reicht doch... math brauchst auch nich du rechnest ja nur mit + - / und *
So als Weihnachtsgeschenk erkläre ich dir deinen Fehler mal ausführlichZitat von Pr1Me
Die Else Abfrage gilt immer nur zur Vorherigen If Abfrage, ich hab beide mal Rot Markiert in deinem Post:
Dies könntest du mit 2 Sachen umgehen. Beide Lösungen biete ich dir jetzt hier mal an: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;
}
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.
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:
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;
}
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.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;
}
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:
So als Weihnachtsgeschenk erkläre ich dir deinen Fehler mal ausführlichZitat von Pr1Me
Die Else Abfrage gilt immer nur zur Vorherigen If Abfrage, ich hab beide mal Rot Markiert in deinem Post:
Dies könntest du mit 2 Sachen umgehen. Beide Lösungen biete ich dir jetzt hier mal an: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;
}
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.
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:
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;
}
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.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;
}
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
[S] Nette Leute
[Ironie]
[S] Imba FUD Crypter
[B] PSC, 11!! NonPub Wissen
[/Ironie]
kleiner fehler:
das ; is doch überflüssig oder nich??Code:Source: Anfang:;
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^^
Hi
Nein, kannst Du nicht.Zitat von eRaSeR!
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