Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
pfiffikus_86

Anmeldungsdatum: 10.11.2004 Beiträge: 11
|
Verfasst am: 24.01.2005, 19:04 Titel: SELECT CASE |
|
|
Hi, kann mir jemand sagen, warum in diesem Beispiel, die Schleife verlassen wird, wenn ich "+" oder "-" drücke??? Eigendlich soll der Wert der Variable "warte", erhöht oder vermindert werden. Wenn ich aber "+" oder "-" drücke wird die Schleife verassen, warum?
Code: | FOR I = 1 TO zeilen - posi - 14
posi = posi + 1
COLOR 14: FOR z = 8 TO 20
LOCATE z, 79: PRINT "±": NEXT z
LOCATE CINT(cursor) + 8, 79: PRINT "Û"
IF INKEY$ <> "" THEN
SELECT CASE INKEY$
CASE "+": warte = warte + .05: IF warte >= 2.5 THEN warte = 2.5: GOTO jumper:
CASE "-": warte = warte - .05: IF warte <= .05 THEN warte = .05: GOTO jumper:
CASE ELSE: music: EXIT FOR
END SELECT
END IF
jumper:
NEXT I |
Helft mir!!! _________________ Ich programmiere lieber, als aufs Klo zu gehen! |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 24.01.2005, 19:10 Titel: |
|
|
Bei deiner Schleife ist es egal, welche Taste du drückst, versuch mal
Code: | IF INKEY$ <> "+" OR INKEY$ <> "-" THEN ' Anweisungen |
_________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 24.01.2005, 19:15 Titel: |
|
|
.... ich seh den grund jetzt nicht.
versuchs doch mal mit den QB-Debug-Funktionen:
Lass QB Alle für den Programmteil relevanten Variablen überwachen, und führe das Prog schritt für schritt mit F8 statt F5 aus.
evtl liegts an der Zeile GOTO jumper
So wie ich des sehe, is die nicht nötig, aber vllt hast du auch bloß ein paar zeilen weggelassen, damits für hier übersichtlicher wird..?
Anmerkung:
SELECT CASE INKEY$ ist eigentlich immer schlecht. Warum? Wenn du jetzt mit der Keyboardeingabe weiterarbeiten möchtest, muss die erst neu abgefragt werden. Das kostet Zeit. Sicher, in vielen Fällen muss nur einmal gefragt werden. Trotzdem ist es meistens besser zu schreiben:
k$ = INKEY$
SELECT CASE k$
...
Tja, ich hoffe, das hat dir geholfen  _________________ 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 |
|
 |
code
Anmeldungsdatum: 19.01.2005 Beiträge: 154
|
Verfasst am: 24.01.2005, 19:20 Titel: |
|
|
und wenn du keine taste drückst wird die schleife nicht beendet?
weil eigentlich ist es ja keine endlosschleife. und wenn die schleife "zeilen-posi-14" mal durchgelaufen ist, wird sie verlassen. (posi wird ja immer erhöht) |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 24.01.2005, 19:27 Titel: |
|
|
Kann es vllt sein, dass du gleich zu anfang "+" gedrückt hast, und nur dachtest, dass das die Schleife beendet hat?
In dem Fall probier doch mal:
Code: |
zaehler= 1
DO
zaehler = zeilen - posi - 14
posi = posi + 1
...
LOOP WHILE zaehler
|
Das sollte helfen. _________________ 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 |
|
 |
pfiffikus_86

Anmeldungsdatum: 10.11.2004 Beiträge: 11
|
Verfasst am: 24.01.2005, 19:49 Titel: |
|
|
Hi, ich bin’s noch mal, ich hab mich etwas ungünstig ausgedrückt.
...Die FOR NEXT Schleife funktioniert klasse, ich will nun in der FOR NEXT Schleife zwei Tasten einlesen ("+" und "-"), wenn ich nun aber eine andere Taste (<> "+" und <> "-") drücke, soll die FOR NEXT Schleife abgebrochen werden.
Und wenn ich die Taste "+" drücke soll die Variable "warte" erhöht und bei "-" vermindert werden.
Vielleicht kann mir jemand helfen! Danke _________________ Ich programmiere lieber, als aufs Klo zu gehen! |
|
Nach oben |
|
 |
code
Anmeldungsdatum: 19.01.2005 Beiträge: 154
|
Verfasst am: 24.01.2005, 20:25 Titel: |
|
|
also um das nochmal zusammen zufassen:
dein programm schreibt an der seite +/-
und dass 12 mal.
dann wird abgefragt, ob gerade eine taste gedrückt wird. wenn keine gedrückt wird läuft die schleife weiter. wenn eine taste gedrückt wird kommt die if abfrage, wenn die taste +/- ist, dann wird warte erhöht/erniedrigt. bei allen anderen tasten wird abgebrochen.
eine zwischefrage warum hast du die sprungmarke jumper? die kannste auch weglassen.
dann beginnt die for schleife von neuem.
und ich finde hier liegt das problem. Bei heutigen rechengeschwindigkeiten wird diese schleife in 0 komma nichts durchlaufen, und ist schon wieder am ende bevor man reagieren kann und eine taste drücken kann. da es keine endlosschleife ist, hat das programm die schleife schnell durchlaufen und du kommst gar nicht zum zug die taste zu drücken.
oder willst du das das programm bei der eingabe der werte anhält?
da eignet sich input$(1) |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 24.01.2005, 23:35 Titel: Re: SELECT CASE |
|
|
Hallo
pfiffikus_86 hat Folgendes geschrieben: | Code: | IF INKEY$ <> "" THEN
SELECT CASE INKEY$ |
|
Hier liegt der Fehler. Wenn du den Tastaturpuffer mit INKEY$ ausliesst, wird er dabei gleichzeitig geleert. Bei deinem zweiten INKEY$ ist dann nichts mehr drin. Du musst die Taste also in einer extra Variablen zwischenspeichern. Das ist bei INKEY$ immer so!
Code: | t$ = INKEY$
IF t$ <> "" THEN
SELECT CASE t$ |
usw.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 25.01.2005, 19:11 Titel: |
|
|
Kann es sein, dass du die Variable
warte
als INTEGER (Ganzzahltyp) deklariert hast?
Dann dürfte die Subtraktion/Addition von .05 nicht funzen.
Versuch mal
DIM warte as double
Kann sein, dass das jetzt klappt...
jb |
|
Nach oben |
|
 |
|