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:

Eingabeschleife

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



Anmeldungsdatum: 09.08.2005
Beiträge: 45

BeitragVerfasst am: 29.08.2005, 23:08    Titel: Eingabeschleife Antworten mit Zitat

Hi,

Folgendes Problem.

Um während einer Eingabe die SysZeit anzeigen zun lassen muss ich die Eingabe natürlich in eine Schleife fassen damit die Zeit ständig aktualisiert wird.
Ich lese die Tastatureingabe mit A$ = INKEY$ ein und lasse dann die Variable (z.B.lächeln Name$ immer + A$ werden.

Wie würde das Inkey nun für Backspace sein und mit welchem Algorythmus lasse ich Name$ dann wieder -1 werden???

Vielen Dank
Guido
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 29.08.2005, 23:20    Titel: Antworten mit Zitat

Du könntest LEFT$ verwenden:

Code:
DO
 ' ... Zeit anzeigen

 a$ = INKEY$

 SELECT CASE ASC(a$)
 CASE 32 TO 122 ' Space bis kleines z
  name$ = name$ + a$

 CASE 8 ' Backspace
  IF LEN(name$) THEN name$ = RIGHT$(name$, LEN(name$) - 1)

 CASE 13 ' Enter
  EXIT DO
 END SELECT
LOOP


(nicht getestet, sollte aber funzen)


Have a nice day
Ciao
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 30.08.2005, 14:04    Titel: Antworten mit Zitat

@Dusky: Das muss
Code:

name$ = LEFT$(name$, LEN(name$) - 1)

heißen.
Hast du ja auch gesagt, nur irgendwie nicht geschrieben. lächeln

@ spawn: Das hättest du aber auch in der MonsterFAQ gefunden. peinlich

jb


Zuletzt bearbeitet von jb am 03.09.2005, 11:20, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
spawn



Anmeldungsdatum: 09.08.2005
Beiträge: 45

BeitragVerfasst am: 31.08.2005, 20:54    Titel: Antworten mit Zitat

ja - sorry

ich schreibe grade ein Prog, das relativ schnell fertig sein sollte, ich habe nicht die Zeit alles nachzulesen, was ich nicht weis.
Ich weis ja nicht was drin stht und was nicht.

eine frage noch: wie muss ich denn ABC() dimensionieren?

vielen Dank für die Antworten
Guido
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 31.08.2005, 21:02    Titel: Antworten mit Zitat

Du meinst wohl ASC(), und das ist kein Array, sondern eine feststehende Funktion lächeln

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 31.08.2005, 22:17    Titel: Antworten mit Zitat

Hallo.

Code:
PRINT ASC("A") 'ergibt 65
PRINT ASC("0") 'ergibt 48


ASC gibt den ASCII Code eines Zeichens aus. Es ist quasi das Gegenstück zu CHR$(Zahl%), das an Hand eines ASCII Codes den Buchstaben ausgibt. Eine ASCII-Tabelle findet sich beispielsweise auf www.qbasic.de im Downloadbereich, wo man bequem nachschauen kann, welches Zeichen welchen Code hat und umgekehrt.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OdinX



Anmeldungsdatum: 29.07.2005
Beiträge: 253
Wohnort: SG Schweiz

BeitragVerfasst am: 01.09.2005, 13:06    Titel: Antworten mit Zitat

Qb4.5 hat schon eine ascii-tabelle enthalten.

unter "hilfe > themen > ASCII-Zeichencodes" findest du sie.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 01.09.2005, 15:27    Titel: Antworten mit Zitat

Und um das noch zu komplettieren, die Gegenfunktion zu
Code:
ASC()

ist
Code:
CHR$()

Diese wandelt einen ASCII-Wert in ein Zeichen um; analog zu Sebastians Beispiel:
Code:

PRINT CHR$(65) 'ergibt "A"
PRINT CHR$(48) 'ergibt "0"


jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 14.09.2005, 19:59    Titel: Man kann d.Uhrzeit auch mit ON TIMER unabh. v.Hauptprg anz. Antworten mit Zitat

Man kann die Uhrzeit auch mit ON TIMER unabhängig vom Hauptprogramm anzeigen. Wie das geht, steht in der QB-MonsterFAQ unter

"Datum/Uhrzeit und Bildung von Wartezeiten -> Wie kann man die Uhrzeit unabhägig vom Hauptprogramm anzeigen?"
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
pinkpanther



Anmeldungsdatum: 28.05.2005
Beiträge: 79
Wohnort: Wien

BeitragVerfasst am: 20.09.2005, 16:54    Titel: Antworten mit Zitat

Die Zeit mit Hilfe von ON TIMER(1) - wie im Monster-FAQ-Beispiel angeführt - sekundenaktuell anzeigen zu lassen, ist eine ziemlich performance-feindliche Vorgangsweise: Man stelle sich vor, dass der Compiler in Programmabschnitten, in denen diese Pseudo-Ereignisverfolgung aktiv ist, nach jeder benutzergenerierten Programmzeile prüfen lässt, ob das zu überwachende Ereignis eingetreten ist. verwundert

Lösungen:
(1) Wenn nicht gerade auf Benutzereingabe gewartet wird (Menüs, Eingabefelder...), sondern Daten verarbeitet werden (z.B. Berechnungsvorgänge, Auslesen einer Datei) Ereignisverfolgung jedenfalls mit TIMER STOP deaktivieren.
(2) Eventuell auf sekundengenaue Auflösung verzichten und die Uhrzeit lediglich als Stunden und Minuten anzeigen (in der DOS-Box unter Windows können die Intervalle zwischen den Sekunden zudem ziemlich schwanken!)
(3) "Echte" Ereignisverfolgung programmieren - das allerdings ist wohl absoluten (ASM-)Profis vorbehalten.

A propos Eingabefelder:
Ich habe bemerkt, dass die Ereignisverfolgung offenbar aussetzt, während INPUT auf Benutzereingabe wartet - siehe folgendes Beispiel (gilt auch für INPUT$):

Code:
ON TIMER(1) GOSUB zeitAusgabe
TIMER ON

CLS
GOSUB zeitAusgabe

LOCATE 4, 1
INPUT "Geben Sie bitte irgend etwas ein: ", A$    'Uhrzeit wird nicht aktualisiert!

END

zeitAusgabe:
  LOCATE 1, 1
  PRINT TIME$
  RETURN


Lösung:
Den Befehl INPUT durch folgende Zeilen ersetzen:

Code:
PRINT "Geben Sie bitte irgend etwas ein: ";
WHILE LEN(INKEY$) = 0: WEND


Möchte man aber nicht bloß auf eine beliebige Taste warten, sondern einen ganzen String einlesen, ohne den INPUT-Befehl zu verwenden, wird's gerade für Anfänger mühsam. verwundert

Das sei nur der Vollständigkeit halber ergänzt.

lG
pinkpanther zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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 QBasic. 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