C++ Verständnisfrage zu logischem Operator

  • Hi Leute,

    ich bin schon länger auf der Suche nach einer Erklärung für das Verhalten von folgendem Code:

    #include <iostream>
    using namespace std;

    int x, y, Variable;
    char ende;

    int main ()

    {
    do
    {
    cout << "Bitte x eingeben: ";
    cin >> x;
    cout << "Bitte y eingeben: ";
    cin >> y;

    Variable = x > 3 && y < 4;
    cout << Variable << endl;
    cout << "Beenden mit <e> oder <E>" << endl;
    cin >> ende;
    }
    while (ende != 'e' || ende != 'E');

    Mir geht es jetzt um die do-while Schleife. Nach meiner Logik müsste das Programm nach der Eingabe von <e> oder <E> abbrechen.
    Das Programm läuft aber weiter. Ich weiß, daß das Programm mit einer && Verknüpfung so funktionieren würde wie ich es geplant hatte.
    Mir geht es jetzt darum das Verhalten zu verstehen:
    bei einer und-Verknüpfung müssten ja beide Bedingungen zutreffen, aber das kann ja nie der Fall sein, Variable "ende" kann nicht e und E gleichzeitig sein.
    Umgekehrt bei der oder-Verknüpfung muß ja nur eine Bedingung zutreffen. Das ist doch im oberen Beispiel der Fall. Wie gesagt nach meinem Verständnis...
    Kann mich bitte bitte irgendwer aufklären,warum die oder-Verknüpfung im Beispiel oben so nicht funktioniert???

    Danke

  • Hallo,

    wie du schon richtig festgestellt hast, musst du das mit einer &&-Verknüpfung lösen.

    Die Erklärung:
    Angenommen du gibst 'e' ein.
    ende != 'e' == false
    ende != 'E' == true

    false || true == true -> Schleife läuft weiter.

    ende darf ja beides nicht sein. Also ende darf weder 'e' noch 'E' sein. Die Bedinung muss also lauten: Solange ende ungleich 'e' und ende ungleich 'E', laufe weiter.


    Ich hoffe die Erklärung ist halbwegs verständlich.

    Gruß

    Sascha

    Einmal editiert, zuletzt von sashs (30. Januar 2009 um 11:56)

  • Allerbesten Dank sashs,

    deine Erklärung ist sehr verständlich!

    In einem anderen Forum hat mir jemand so geantwortet(netterweise ist ja nicht selbstverständlich):

    "Mindestens einer der beiden Ver(un)gleiche ist wahr für jeden beliebigen Wert von 'ende' (falls ende gleich 'e' dann ist es auf jeden Fall ungleich 'E' und andersherum). Der Gesamtausdruck (durch logische Oder-Verknüpfungen) ist dann auch immer wahr und damit entsteht eine Endlosschleife."

    Das hab ich ehrlich gesagt noch immer nicht ganz verstanden...

    Nochmals Danke!

  • @ The User:

    Naja, wenn schon jemand so nett ist und bei einem Problem hilft sollte ein Danke und 'ne höfliche Umgangsform doch das mindeste sein...

    Ich kenn ja leider persönlich niemand der sich mit Programmierung beschäftigt, den ich hätte fragen können, und die Tutorrials und Bücher (so hilfreich sie auch sind) nützen dir in dem Moment dann auch nicht...

  • Ich finde das auch gut, wenn sich jemand bedankt. So hat man auch ein Feedback, ob es man geholfen hat.

    Genauso finde ich es positiv, dass du eine gute Ausdrucksweise hast. Also nicht so schreibst wie du sprichst oder sowas.
    Ich persönlich finde es gut, wenn man auf sowas achtet.

    Gruß

    Sascha