Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Sven49
Anmeldungsdatum: 23.04.2015 Beiträge: 8
|
Verfasst am: 23.04.2015, 12:36 Titel: Anfängerfrage zum loop oder mehr? |
|
|
Hallo,
wie im Titel ersichtlich bin ich neu im FreeBasic.
Ich bin grade im Anfänger-Tutorial Abschnitt 3 Seite 1 und habe das soweit auch verstanden, denke ich.
Ich spielte etwas herum und versuchte folgendes:
dim wahl as string
do
wahl=inkey
print inkey;
loop until wahl = chr(27)
Die Idee ist, dass eine gedrückte Taste auf dem Bildschirm ausgegeben wird und mit ESC beendet.
Aber irgendwie funktioniert das nur selten (in der obrigen Version noch am besten, in der Schleife integrierte sleep x Befehle verschlechterten das Ergebnis), mit Ausnahme der ESC-Taste.
Ich frage mich jetzt, warum das so ist und was ich da falsch gemacht habe?
Gruß!
Sven |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 23.04.2015, 12:58 Titel: |
|
|
Hallo und Willkommen im Forum!
Der Fehler ist, dass du mehrere Male die Inkey() Funktion aufrufst.
Dabei wird jedes Mal das jeweils nächste Zeichen vom Tastaturpuffer zurückgegeben und aus diesem gelöscht.
Um das Problem zu behen, ruft man die Inkey() Funktion nur ein einziges mal auf, und speichert sich die gedrückte Taste.
Das machst du ja im Grunde auch schon (Variable "wahl"). Nur musst du dann auch immer diese Variable verwenden, um auf den gespeicherte Tastendruck zuzugreifen.
Genau das machst du beim Print nicht. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Sven49
Anmeldungsdatum: 23.04.2015 Beiträge: 8
|
Verfasst am: 23.04.2015, 13:24 Titel: |
|
|
Ich bin ein Esel!
Natürlich muss es print wahl; heißen...
Vielen Dank!  |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 23.04.2015, 20:46 Titel: |
|
|
Und natürlich noch ein paar wichtige Verbesserungen:
Code: | dim wahl as string, i as Integer
do
wahl=inkey
If wahl = "" Then
' Nichts gedrückt = Prozess erst einmal schlafen legen!
Sleep
' Ein Tastendruck weckt ihn dann wieder => der Taskmanager
' (Windows) bzw. "top" (Linux) zeigen, warum dies wichtig ist
Else
' Und hier noch an nicht druckbare Zeichen denken!
For i=1 To Len(wahl)
print " "; asc(Mid(wahl, i, 1));
Next i
print
End If
loop until wahl = chr(27) |
Natürlich wäre eine Verfeinerung von letzerem, den Tastendruck direkt als FreeBasic-Stringliteral wie z.B. !"\027", !"\255M" usw. ausgeben zu lassen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Sven49
Anmeldungsdatum: 23.04.2015 Beiträge: 8
|
Verfasst am: 23.04.2015, 21:03 Titel: |
|
|
Danke Dreael!  |
|
Nach oben |
|
 |
|