Kleiner Denkfehler und Syntax



  • Enno schrieb:

    Hi,

    ich würde gerne eine logische Abfrage in c++ machen, die praktisch einem "entweder oder" entspricht..folgender Code. Ich dachte da an XOR als exklusives oder.

    wo ist das Problem? XOR mit booleschen Variablen wäre dann ein !=

    Aber vielleicht habe ich auch einfach nur einen Logikfehler, ich will, dass die Fehlermeldung nur kommt wenn pF.size nicht NrPunkte oder pf.size() nicht (netz)size() entspricht.

    Was denn nun? einfaches "oder", oder ein exklusives "entweder oder"? Du musst dich gerade bei sowas schon genau ausdrücken.

    Bei der normalen Abfragen wird ja immer eine Abfrage erfüllt.

    Was meinst du damit? 😕

    Zuer Erklärung: Entweder oder (also XOR) heißt, dass eben entweder das eine oder das andere zutrifft (aber nicht beides gleichzeitig). Normales Oder (OR) heißt, dass entweder das eine, oder das andere, oder beides zutrifft. In deinem Fall siehts eher so aus als ob du das normale Oder suchst.



  • jperl schrieb:

    wie wärs mit:

    if ( (pF.size() != NrPunkte) != (pF.size() != size()) )
    {
        FatalErrorIn << abort(FatalError);
    }
    

    jperl

    Ok, ich versuche es mal übersichtlicher zu erklären.

    pF.size() darf mit ZWEI Werten die Abfragen bestehen.
    Davon wird eine aber immer erfüllt, wenn die andere zutrifft.

    Bsp.

    pF.size() = 1100
    NrPunkte = 1100
    size() = 1300

    In diesem Fall soll er NICHT in die Fehlerabfrage springen, da eine Bedingung erfüllt wurde. Bei dem enfachen OR bzw. || würde er aber reinspringen. Weiß einer was ich meine ? 😕



  • ich verstehe es zwar immer noch nicht ganz genau, aber du willst nur reinspringen wenn beide falsch sind, oder?

    dann verknüpf die beiden doch durch &&.

    jperl



  • 🙂 Das ist es ja, wahrscheinlich bin ich so verwirrt, dass ich es schon falsch erkläre.

    Also er soll in die Abfrage, wenn

    entweder

    pF.size() != size

    oder

    pF.size() != NrPunkte

    oder

    pF.size() != NrPunkte UND pf.size() != size()

    Nochmal ein Bsp.

    pF.size() = 1000
    size() = 1000
    NrPunkte = 1200

    ---> Hier nicht in die Abfrage

    pF.size() = 1000
    size() = 1200
    NrPunkte = 1000

    ----> Hier nicht in die Abfrage

    pF.size() = 1000
    size() = 1200
    NrPunkte = 1300

    ----> Hier in die Abfrage



  • So wie im Bsp. !! Sorry, das davor ist Quatsch!



  • Wo is das Problem? 🙂

    if ( ( pF.size() != size ) || 
         ( pF.size() != NrPunkte ) || 
         ( ( pF.size() != NrPunkte ) && ( pf.size() != size() ) ) )
    {
    ...
    }
    

    Edit: klammer hat gefehlt

    Edit2: ??? hää, was genau is denn nu quatsch? ich blick bei dir nich mehr durch 🙂



  • Sorry, bin irgendwie verstrahlt heute, aber so muss ich es jetzt WIRKLICH hinbekommen (das meinte ich mit Bsp.):

    pF.size() = 1000
    size() = 1000
    NrPunkte = 1200

    ---> Hier nicht in die Abfrage

    pF.size() = 1000
    size() = 1200
    NrPunkte = 1000

    ----> Hier nicht in die Abfrage

    pF.size() = 1000
    size() = 1200
    NrPunkte = 1300

    ----> Hier in die Abfrage

    So jetzt aber, danke für eure Geduld



  • du meinst also, wenn pfsize weder gleich size ist, noch gleich NrPunkte? dafür ist dann weder or noch xor das richtige:

    if ((pfSize != size()) && (pfSize != NrPunkte))
    

    andere Möglichkeit (liefert das selbe Ergebnis):

    if (! (pfSize == size() || pfSize == NrPunkte))
    


  • so wie ich das verstehe willst du in die abfrage wenn beide bedingungen erfüllt sind:

    if ( (pF.size() != NrPunkte) && (pF.size() != size()) )
    {
        FatalErrorIn << abort(FatalError);
    }
    

    jperl



  • Klingt super,

    teste es gerade, sieht gut aus! Vielen Dank nochmal!


Anmelden zum Antworten