Deutsch
Forum

Bug in RC-Version: Select kapituliert

 

Nico
Madysa
Wird in einem Select-Block ein Wert mit anderen Werten aus einem Array von Strukturen verglichen, so wird man sofort in die erste Case-Of-Anweisung verwiesen, egal ob das stimmt oder nicht. Mit If-Elseif-Endif passiert das nicht.
Minimalbeispiel:
KompilierenMarkierenSeparieren
Struct TPoint = x&,y&
declare b*[1]
Dim b*[],TPoint
b*[0].x& = 1
b*[0].y& = 2
b*[1].x& = %hWnd
b*[1].y& = 4
cls
print GetActiveWindow(),"=",

Select GetActiveWindow()

    CaseOf b*[0].x&

    print b*[0].x&

    CaseOf b*[0].y&

    print b*[0].y&

    CaseOf b*[1].x&

    print b*[1].x&

    CaseOf b*[1].y&

    print b*[1].y&

Endselect

Dispose b*[]
waitinput
end
 
Nico Madysa
09.08.2008  
 




Jac
de
Lad
b*[]????
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
09.08.2008  
 




RGH
Das "Minimalbeispiel" ist natürlich voller Fehler und wurde vom Ersteller desselben offenbar niemals ausprobiert. Erstens ist * kein gültiger Variablenkennzeichner, sondern hier ist offensichtlich das # gemeint. Schon seltsam, wie konsequent der Fehler auftaucht, der das Programm allerdings sofort mit einer Fehlermeldung beendet. Zum zweiten wird %hWnd einer Variablen zugewiesen, bevor das Hauptfenster überhaupt existiert. Das Programm würde also auch bei korrektem Variablenbezeichner nicht funktionieren. Solche ungetesteten Minimalbeispiele sind also alles andere als hilfreich. Das Posten ungetesteter Codes sollte verboten werden!

Aber andererseits: der Bug, den das Programm vergeblich zu demonstrieren versucht, scheint tatsächlich seit Einführung des SELECT mit XProfan 10 vorhanden zu sein: Wenn hinter dem CaseOf ein Element eines Struktur- oder Objekt-Arrays steht, funktioniert es nicht richtig. Da dieser Fehler aber seit 15. Mai 2006 (also seit über 2 Jahren) unentdeckt blieb, scheint das nicht so häufig vorzukommen.

Sollte es ein XProfan 11,0a oder 11,1 oder so geben, wird der Fehler da natürlich korrigiert sein.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
09.08.2008  
 




Nico
Madysa
Ääääähm - ok. Ja, ich habe diesen Code nie getestet. Den Originalcode hatte ich nicht mit und habe ihn schnell aus dem Kopf eingetippt. Dabei bin ich wohl jedesmal auf die Sternchen- statt auf die Raute-Taste gekommen, was den Fehler erklärt.
Allerdings habe ich den Code jetzt korrigiert und der Bug ist immer noch da.
Hier ist die richtige Version:
KompilierenMarkierenSeparieren
Struct TPunkt = x&,y&
declare b#[1]
Dim b#[],TPunkt
cls
b#[0].x& = 1
b#[0].y& = 2
b#[1].x& = %hWnd
b#[1].y& = 5
print b#[0].x& =,b#[0].x&
print b#[0].y& =,b#[0].y&
print b#[1].x& =,b#[1].x&
print b#[1].y& =,b#[1].y&
print GetActiveWindow(),=,

Select GetActiveWindow()

    CaseOf b#[0].x&

    print b#[0].x&

    CaseOf b#[0].y&

    print b#[0].y&

    CaseOf b#[1].x&

    print b#[1].x&

    CaseOf b#[1].y&

    print b#[1].y&

EndSelect

Dispose b#[]

while 1

    waitinput

wend

 
Nico Madysa
22.08.2008  
 




Jörg
Sellmeyer
Das steht in der Hilfe zu Select:


Ein beliebiger Ausdruck der Typen Float, Integer, LongInt oder String.


Du gibst eine Strukturvariable an. Es wäre natürlich schön, wenn es klappen würde, aber es wird nirgends behauptet, daß es klappen sollte.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
23.08.2008  
 



Und wenn er es z.B. int()et ?
 
23.08.2008  
 




René
Wagner
Moin,

das Element, auf das er in der Strukturvariablen referenziert, ist doch aber ein Float. Ich wäre an Hand der Beschreibung auch davon ausgegangen, dass das so klappt.

Gruß René
 
Mit XProfan erstellte Freeware findet ihr hier:  [...] 

US World Domination Tour - bombing a country near you...
23.08.2008  
 




Jörg
Sellmeyer
Zumindest Profan sieht das anders:
KompilierenMarkierenSeparieren
Cls

Proc Test

    WhileLoop %pcount

        print pType$(&Loop),&Loop

    Wend

EndProc

Struct TPunkt = x&,y&
declare b#[1]
Dim b#[],TPunkt
cls
b#[0].x& = 1
Declare a$,b%,c&,d!,e#
Dim e#,4
Long e#,0=1000
a$ = "a"
b% = 1
c& = 2
d! = 3.5
Test(b#[0].x&,a$,b%,c&,d!,e#)
Dispose b#[]

while 1

    waitinput

wend

 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
23.08.2008  
 




Nico
Madysa
OK, mein Fehler; das passiert, wenn man in Deutschland etwas nach Vernunft statt nach dem Regelwerk angeht. Ich werde sehen, ob ein einfaches int() das Problem behebt, andernfalls muss man einfach eine If-Anweisung nehmen.
 
Nico Madysa
29.08.2008  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.166 Betrachtungen

Unbenanntvor 0 min.
Detlef Jagolski12.12.2010

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie