GLBasic forum

Other languages => GLBasic - de => Topic started by: Fauk on 2008-Dec-25

Title: Merkwürdiger Fehler
Post by: Fauk on 2008-Dec-25
Bei mir kommt bei folgendem Code immer ein Syntax Error:
Code (glbasic) Select

IF ((Spieler1.Y) - 100) >= (Screen_Y - 16) THEN ((Spieler1.Y) - 100) = (Screen_Y - 16)


Wenn ich es so mache funktioniert es:
Code (glbasic) Select

IF ((Spieler1.Y) - 100) >= (Screen_Y - 16) THEN Spieler1.Y = (Screen_Y - 16)


So aber wiederum auch nicht:
Code (glbasic) Select

IF ((Spieler1.Y) - 100) >= (Screen_Y - 16)
      ((Spieler1.Y) - 100) = (Screen_Y - 16)
ENDIF


Habe es schon mit und ohne Klammern versucht, jedesmal das gleiche Ergebnis.

Sehe ich da den Fehler nicht oder ist das ein Bug?
Title: Re: Merkwürdiger Fehler
Post by: Kosta on 2008-Dec-25
Meiner Meinung nach (wart aber lieber nach einer Aussage von Gernot):

Mit THEN kannst du nur einen Befehl benutzen. Durch die Umklammerung werden (intern?) mehrere Befehle daraus und der Compiler verspult sich irgendwie..
Title: Re: Merkwürdiger Fehler
Post by: Fauk on 2008-Dec-25
Dann müsste es doch aber mit IF....ENDIF funktionieren, was es aber auch nicht tut:/
Title: Re: Merkwürdiger Fehler
Post by: Quentin on 2008-Dec-25
ähhh eine Zuweisung hat aber eigentlich die Berechnung nur auf der rechten Seite des Ausdruckes:

also:
Code (glbasic) Select

Spieler.y - 100 = Screen_Y - 16


ist schmarrn, zumindest für einen Compiler, auch wenn es mathematisch gesehen korrekt sein kann ;))

richtiger wäre hier dann wohl
Code (glbasic) Select

Spieler.y = Screen_Y - 16 - 100


In der IF-Abfrage klappt das natürlich, weil du hier ja zwei Ausdrücke vergleichst, bei Wertzuweisungen kann das aber nicht klappen.
Wertzuweisungen haben auf der linken Seite des Gleichheitszeichen eine Variable und rechts davon einen beliebig komplexen Ausdruck. Beim Vergleich mit IF werden zunächst die Ausdrücke rechts und links vom Vergleichsoperator (=, >, < etc.) berechnet und dann der Vergleich gemacht.
Title: Re: Merkwürdiger Fehler
Post by: peterpan on 2008-Dec-25
Ja,  Quentin liegt richtig !
Man kann das auch so schreiben:

if spieler1.Y -100 >= screen_Y -16
screen_Y = screen_Y -16
spieler1.Y = screen_Y
endif
Title: Re: Merkwürdiger Fehler
Post by: Kitty Hello on 2008-Dec-26
Quentin hat zu 99% recht.
Der = operator ist auf der linken Seite eine Zuweisung:
a = 5+7
auf der rechten Seite, ist er ein Vergleich:
IF a=5 THEN ...
und:
a = b=c
b=c wird TRUE oder FALSE, das wird dann a zugewiesen.
Title: Re: Merkwürdiger Fehler
Post by: peterpan on 2008-Dec-26
und das Fehlende 1% liegt wahrscheinlich an seinem Freudentanz !

That is one percent  jig !
http://de.youtube.com/watch?v=6uscaMe5lVg&feature=related.
Title: Re: Merkwürdiger Fehler
Post by: Fauk on 2008-Dec-28
Ah, ok. Vielen Dank für die Aufklärung :good: