Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 15.04.2006, 11:13 Titel: SCREEN Funktion |
|
|
Ist das ein Bug oder ist das Normal?
Code: | locate 1,1
? chr$(219)
? screen(1,1)
sleep |
In der Doku steht nichts brauchbares dazu:
Freebasic.net
Wieso gibt es einen Minus Wert aus? |
|
Nach oben |
|
 |
Lee
Anmeldungsdatum: 15.04.2006 Beiträge: 5
|
Verfasst am: 15.04.2006, 12:30 Titel: Re: SCREEN Funktion |
|
|
Code: |
locate 1,1
? chr$(219)
? cUByte(screen(1,1))
sleep
|
So gehts
219-256=-37
Kappiert warum das ergebnis in deiner Variant rauskommt? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 15.04.2006, 12:46 Titel: |
|
|
Die Entwickler haben Byte mit UByte verwechselt?
Das ist doch nur ein Work-A-Round und geht nicht auf meine Frage ein.
Auf so eine Idee bin ich auch gekommen ...
Nochmal:
Ist der Rückgabewert korrekt (=liegt der Fehler bei mir)?
Oder ist der Befehl fehlerhaft?
Ich geh ins Englische Forum und stelle dort die Frage zusätzlich, ich bin der Meinung das es ein Bug ist.
Meldung im Englischen Forum |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 15.04.2006, 13:43 Titel: |
|
|
Mmmm.. Michael Frey hat Folgendes geschrieben: | Die Entwickler haben Byte mit UByte verwechselt? | Woher soll den ein 'Entwickler' wissen was du als Ergebnis möchtest (Byte oder UByte)?
Das solltest du vorher festlegen.
Code: | Dim i as Ubyte
locate 1,1
i=219
? chr$(i)
i=screen(1,1)
?i
sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 15.04.2006, 14:04 Titel: |
|
|
Code: | ? chr$(219)
? asc(chr$(219))
? chr$(asc(chr$(219)))
sleep |
Irgendwie gibt es mit dem erweiterten Zeichensatz allgemein Probleme ...
Also ich bin der Meinung, das es üblich sei die Erweitertet Zeichen mit
128 ... 255 darzustellen und nicht mit -1 ... -128.
(Beziehungsweise den entsprechenden Hex Werten)
Siehe z.B. Wikipedia:
http://en.wikipedia.org/wiki/Code_page_437
(Auf diese Seite wird man über die Befehlsreferenz verwissen)
oder auch
http://de.wikipedia.org/wiki/Ascii
Auch deine Lösung ist meiner Meinung nach nur ein Work a round, weil wenn ich IF Abfragen mache ist das recht unelegent:
Code: | locate 1,1
? chr$(219)
if CUBYTE(screen(1,1))=219 then
locate 10,1
? "ja"
end if
sleep |
Klar geht es, aber ich finde es logischer wenn es so wäre:
Code: | locate 1,1
? chr$(219)
if screen(1,1)=219 then
locate 10,1
? "ja"
end if
sleep |
Ich hab offengesagt respekt davor das ich jetzt Code schreibe, denn ich bei einem Compiler Update wegen eines Bugfixes ändern muss. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 15.04.2006, 20:00 Titel: |
|
|
nochmal mmmm,
wenn du keine Variable dimensionierst nimmt FB immer an du willst in Integer (32bit, vorzeichenbehaftet) arbeiten. Code: | locate 1,1
? chr$(219)
? hex$(screen(1,1))
sleep |
Erst wenn du deinen Willen erklärst in einem anderen Zahlenbereich zu arbeiten wird umgewandelt, und dann wird auch nach einem 'Bugfix' weiter richtig verglichen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Lee
Anmeldungsdatum: 15.04.2006 Beiträge: 5
|
Verfasst am: 15.04.2006, 21:06 Titel: |
|
|
Die erweiterten Zeichen werden bei C++ mit Minus zahlen angeben. Da dort der Typ für Zeichen char ist. Welcher einen Wertebereich von -128 bis 127 hat. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 16.04.2006, 08:27 Titel: |
|
|
@volta
Wenn ich deiner Logik jetzt folge, müsste die Ausgabe (bei ? screen(1,1)) eben 219 sein, also 0000 0000 0000 0000 0000 0000 1101 1011 b.
Wenn die -37 Korrekt wären, dann ist aber die Doku falsch:
Doku
Zitat: | Differences from QB:
* None |
Weil QBasic gibt 219 aus.
@Lee
Mit der Antwort könnte ich leben, dann muss aber in der Dokumentation der entsprechende Eintrag gemacht werden. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 16.04.2006, 12:39 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | @volta
Wenn ich deiner Logik jetzt folge, müsste die Ausgabe (bei ? screen(1,1)) eben 219 sein, also 0000 0000 0000 0000 0000 0000 1101 1011 b. | Nein, das ist bestimmt nicht meine Logik (und überhaupt nicht logisch?)!
1101 1011b ist als Byte ein negative Zahl, siehe MSB = 1.
Die wird von FB logischerweise auch als negativer Integerwert übernommen also 1111 1111 1111 1111 1111 1111 1101 1011 b.
Zitat: | Differences from QB:
* None |
Wenn das so in der Doku steht, ist die Doku falsch. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 16.04.2006, 13:38 Titel: |
|
|
und die Moral von der Gesichte?
Ich warte auf die Antwort im Englischen Forum, wenn's so ist muss die Doku angepasst werden.
In der Zwischenzeit mach ich einfach CUByte(screen(1,1)) .
Was mir einfach nicht in den dick Schadel passt ist das:
Code: | ? chr$(219)
input a$
? asc(a$)
sleep |
Wenn man hier die Box kopiert und wieder einfügt wird 219 ausgeben.
Irgendwie inkonsequent ... |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 16.04.2006, 13:57 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: |
In der Zwischenzeit mach ich einfach CUByte(screen(1,1)) . |
Da würd ich einfach ganz am Anfang deines Programms folgendes schreiben:
Code: |
#define screen_(x,y) CUByte(Screen(x,y))
'jetzt kannst du ganz einfach alles wie normal benutzen:
Locate 1,1
Print Chr(219)
Print Screen_(1,1)
|
So sollte 219 ausgegeben werden.
Michael _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 16.04.2006, 14:23 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Was mir einfach nicht in den dick Schadel passt ist das:
Code: | ? chr$(219)
input a$
? asc(a$)
sleep |
Wenn man hier die Box kopiert und wieder einfügt wird 219 ausgeben.
Irgendwie inkonsequent ... | wieder nicht...
Ein ASCII - Zeichen ist als UByte (Wertebereich 0 - 255) definiert, das benutzt du doch bei chr$(219).
Bei screen(1,1) machst du einen Speicherzugriff auf den Videospeicher, das Ergebnis ist ein Binärwert (1101 1011 b) den du dann ohne Zuweisung an eine Variable als Integer (vorzeichenbehaftet) bekommst.
So verstanden? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 17.04.2006, 12:24 Titel: |
|
|
Zur Infomation:
Sourceforge Bug Report
v1ctor hat Folgendes geschrieben: | Fixed, the changes are in the CVS repository, the runtime library must be recompiled. |
|
|
Nach oben |
|
 |
|