And und Or Verknüpfung fehlerhaft? *gelöst*

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
BlueHoschi
Beiträge: 97
Registriert: 02.10.2007 07:19

And und Or Verknüpfung fehlerhaft? *gelöst*

Beitrag von BlueHoschi »

Hallo @ all,

habe keinen anderen Thread zu diesem Thema gefunden zumindest nicht bei den Bugs, und dafür halte ich es eigentlich.
Meine Frage dreht sich um "UND" und "ODER" Verknüpfungen in EINER If-Abfrage.
Folgender Code Funktioniert nicht so, wie er eigentlich sollte:

Code: Alles auswählen

If Var1 = 1 And Var2 = 1 Or Var3 = 1 And Var4 = 1
Debug "Super wenn´s läuft"
endif
irgendwie schneidet PureBasic die Überprüfung der Variablen nach dem "Or" ab. D.h. die ersten beiden Variablen werden auf "Und" geprüft und ergeben den Debug wenn beide da sind, aber bei den beiden nach dem "Or" ist es eigentlich egal wie die Wertigkeit gerade ist, das ergibt eh´ nix.

Eigentlich sollte es genauso Funktionieren wie folgender Code:

Code: Alles auswählen


If Var1 = 1 And Var2 = 1
Varx1 = 1
EndIf

If Var3 = 1 And Var4 = 1
Varx2 = 1
EndIf

If Varx1 =1  Or Varx2 = 1
Debug "Jetzt läuft es aber"
EndIf

Es wäre ja schön wenn man sich die zusätzlichen Variablen (Varx1, Varx2)sparen könnte.
Jemand eine Idee oder hat sich das mit einer späteren Version von PureBasic erledigt? Oder bin ich einfach nur ... nich´ klug genug?

Habe PB 4.0
Zuletzt geändert von BlueHoschi am 30.04.2008 11:49, insgesamt 1-mal geändert.
Wer Dir Steine in den Weg legt, pflastert den vielleicht.

PB 5.21, Win 7 64 bit
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ämm wie wäre es mit Klammern ? damit PB weiß welche Ausdrücke vorrang haben:

Code: Alles auswählen

If (Var1 = 1 And Var2 = 1) Or (Var3 = 1 And Var4 = 1) 
Debug "Super wenn´s läuft" 
endif 
natürlich muss du die Var 1 bis 4 erst mal auf 1 setzten :wink:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Riacon
Beiträge: 61
Registriert: 21.01.2008 09:40

Beitrag von Riacon »

ist doch richtig so:

#true or #false = #true
#true or #true = #true

ist also egal, was nach dem or kommt, wenn der ausdruck vorher bereits wahr ist.

edit:

Code: Alles auswählen

If Var1 = 1 And Var2 = 1 
Varx1 = 1 
EndIf 

If Var3 = 1 And Var4 = 1 
Varx2 = 1 
EndIf 

If Varx1 =1  Or Varx2 = 1 
Debug "Jetzt läuft es aber" 
EndIf 
da kommt auch nichts anderes raus: wenn Varx1 = 1, dann ist auch die letzte bedingung wahr, egal welchen wert Varx2 hat
pb 4.51 win7 64
Benutzeravatar
BlueHoschi
Beiträge: 97
Registriert: 02.10.2007 07:19

Beitrag von BlueHoschi »

@Stargate
KLAMMERN... verdammt damit hat es sich bewahrheitet: ICH BIN NICHT KLUG GENUG :cry:
Manchmal... :freak: aber so richtig...
Dann werde ich das mal testen. ...ähem...
Also vermutlich doch kein BUG.

@Riacon
Was Du schreibst, ist zu dem wie es ja auch richtig ist. Aber immerhin hast Du versucht mir zu helfen --> Dicker Pluspunkt!! :allright:

War mal wieder richtig fix, man muß nie lange auf die Antwort warten.
Das erhöht den Lerneffekt doch massiv. :allright: :allright:

In dieser Antwort gibt es keine versteckte Ironie!!
Wer Dir Steine in den Weg legt, pflastert den vielleicht.

PB 5.21, Win 7 64 bit
Benutzeravatar
BlueHoschi
Beiträge: 97
Registriert: 02.10.2007 07:19

Beitrag von BlueHoschi »

Klammern geht!!
Herzlichen Dank.
Wer Dir Steine in den Weg legt, pflastert den vielleicht.

PB 5.21, Win 7 64 bit
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ja du musst halt bedenken das AND und OR die gleiche priorität haben. Sie werden halt von links nach rechts durchgearbeitet.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten