Programm fehler nicht zu finden
-
Also als erstes mal meinen code
// includes #include <iostream> //namespace using namespace std; //programmierung int main() { //variablen char leben = 'A'; //programmierung cout << "Willkommen zum Spiel!" << endl << "Deine Leben betragen " << leben << endl; cin >> leben; //Gegenalternative if ((leben == 'a') || (leben == 'A')){ } else{ return 0; } //Alternativ /*switch (leben) { case ('a'): cout << "test" << endl; cin >> leben; break; case ('A'): cout << "test" << endl; cin >> leben; break; default: return 0; }*/ while ((leben == 'a') || (leben == 'A')) { cout << "Leben ist immernoch A/a" << endl; cin >> leben; } do { cout << "Um weiter zu Spielen setze die Leben zur&aueck auf A/a" << endl; cin >> leben; }while (leben != 'a' || leben != 'A'); return 0; }Mein Problem hier liegt nur in dem unterem Bereich also diesem Hier!
do { cout << "Um weiter zu Spielen setze die Leben zur&aueck auf A/a" << endl; cin >> leben; }while (leben != 'a' || leben != 'A'); return 0;Mein gedanke das Programm soll beendet werden durch das Klicken der a oder der A Taste jedoch scheint die do while schleife egal was man drückt fort zu laufen muss der while befehl anders geschrieben werden? Bereits versucht habe ich es z.B. schon so!
do { cout << "Um weiter zu Spielen setze die Leben zur&aueck auf A/a" << endl; cin >> leben; }while ((leben != 'a') || (leben != 'A')); return 0;
-
Die Schleife läuft so lange, wie
lebenungleich'a'oderlebenungleich'A'. Überleg dir mal, wann diese Bedingung jemals unwahr wird. Was passiert beispielsweise, wennlebengleich'a'ist?PS: Deine Zeilen 21-25: Ist das deine Art das logische Konzept "NICHT" programmtechnisch auszudrücken?
-
Der Ausdruck ist immer true, sodass die Schleife ewig laufen wird.
Beispielsweise
Wenn leben = a ist,
ist der Ausdruck im Schleifenkopf:
while(false || true),
Damit die Schleife den Wert false im Kopf hat und damit abbricht,
müssen beide Ausdrücke (leben != 'a') und (leben != 'A') den Wert false haben.Ich habe es folgendermaßen gelößt.
do
{
cout << "Um weiter zu Spielen setze die Leben zur&aueck auf A/a" << endl;
cin >> leben;
}while (!(leben == 'a' || leben == 'A'));
return 0;Betrachten wir zuerst den Wert der inneren Klammer :
(leben == 'a' || leben == 'A')Wenn Leben den Wert a bzw. A hat, sieht der Ausdruck folgendermaßen aus.
(true || false) bzw (false || true)Wenn aber der Wert von leben = b ist, sieht der Ausdruck so aus:
(false || false)Weil wir den || Operator (ODER-Operator) nehmen, ist der gesamte Wert der inneren Klammer nur false,
wenn beider Ausdrücke false ist. Solbald auch nur einer von beiden true ist,
ist der ausgangswert der inneren Klammer auch true.Deswegen habe ich das ganze noch einmal in Klammer gesetzt und mit einem Negationsoperator versehen, sodas die ausgangswerte umgekehrt werden
Fazit.
Wenn leben = a oder A ist, ist die innere Klammer true. Wegen des negationsoperators aber nachher in der äußeren
Klammer false. Deswege bricht die Schleife dann Ab. Wenn leben = b oder c ist, ist der Wert der inneren Klammer
false und in der äußeren Klammer wegen des negationsoperators true. Deshalb bricht die Schleife dann NICHT ab.Sorry, wenn ich etwas zu ausführlich war.
Bitte korigiert mich, wenn ich falsch liege.