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;
    

  • Mod

    Die Schleife läuft so lange, wie leben ungleich 'a' oder leben ungleich 'A' . Überleg dir mal, wann diese Bedingung jemals unwahr wird. Was passiert beispielsweise, wenn leben gleich '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.


Anmelden zum Antworten