Italia
Foro

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 naturalmente 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 circa 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 naturalmente korrigiert sein.

Saluto
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 Io l' 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 Aiuto zu Select:


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


Du gibst eine Strukturvariable an. Es wäre naturalmente 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.

Saluto 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 Germania 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  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.180 Views

Untitledvor 0 min.
Detlef Jagolski12.12.2010

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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