Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Anfängerfrage zum loop oder mehr?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sven49



Anmeldungsdatum: 23.04.2015
Beiträge: 8

BeitragVerfasst am: 23.04.2015, 12:36    Titel: Anfängerfrage zum loop oder mehr? Antworten mit Zitat

Hallo, lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 23.04.2015, 12:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sven49



Anmeldungsdatum: 23.04.2015
Beiträge: 8

BeitragVerfasst am: 23.04.2015, 13:24    Titel: Antworten mit Zitat

Ich bin ein Esel! grinsen

Natürlich muss es print wahl; heißen...

Vielen Dank! lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 23.04.2015, 20:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sven49



Anmeldungsdatum: 23.04.2015
Beiträge: 8

BeitragVerfasst am: 23.04.2015, 21:03    Titel: Antworten mit Zitat

Danke Dreael! lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz