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() = 1300In 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!