Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RaideR
Anmeldungsdatum: 15.09.2006 Beiträge: 21
|
Verfasst am: 01.02.2007, 23:10 Titel: Kleines Problem mit goto ( bin mir aber auch net sicher) |
|
|
Hi!
Der Code hier ist zwar nicht gerade die sauberste Lösung aber naja was solls... Kann mir einer sagen wo ich den Fehler drin hab? Wenn der Benutzer die Taste a gedrückt hat dann soll es ihm auch ausgegeben werden, wenn der Benutzer die Taste l ( L ) gedrückt hat soll es ihm auch ausgegeben werden... das ganze soll aber nur einmal passieren sodass der Benutzer nur einmal a und einmal l drücken kann... Wenn der Benutzer als erstes l drückt und danach a funktioniert das auch super!
Wenn der Benutzer nun aber als erstes a drückt und dann l wird nichts ausgegeben...
Kann mir einer bitte den Fehler zeigen? ( Ich hoffe ich hab mich jetzt nicht so umständlich ausgedrückt )
Code: |
CLS
Do
taste$=Inkey$
If WeiterA = 1 Then Goto WeiterAgo
If taste$ = CHR$(65) or taste$ = CHR$(97) THEN
Print "a wurde gedrückt"
WeiterA = 1
WeiterAgo:
If WeiterB = 1 Then Goto WeiterBgo
Elseif taste$ = CHR$(76) or taste$ = CHR$(108) Then
Print "l wurde gedrückt"
WeiterB = 1
End if
WeiterBgo:
Loop Until WeiterA = 1 and WeiterB = 1 |
Ich weiß... die Goto-Befehle nerven aber wir hatten noch net so wahnsinning viel anderes im Unterricht 
Zuletzt bearbeitet von RaideR am 01.02.2007, 23:12, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
proXy
Anmeldungsdatum: 29.01.2007 Beiträge: 6
|
Verfasst am: 01.02.2007, 23:49 Titel: |
|
|
hallooo...
Obwohl ich auch noch eher Anfänger bin, kann ich dir schon jetzt von GOTO abraten Du siehts, wie kompliziert dies schon in deinem kleinen Programm wird. Jetzt kannst du dir etwa vorstellen, wie kompliziert GOTO in einem etwas grösseren Programm würde..
Ansonsten könntest du in deinem Fall Subroutinen verwenden. Macht aber in einem so kurzen Programm wenig Sinn. (http://www.antonis.de/qbkochbu/index.htm#alls)
Edit: Ups... Mein Programm war wohl die Lösung für ein anderes Proglem und hatte obendrein noch einen Programmierfehler..  |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 02.02.2007, 00:25 Titel: |
|
|
..und wieder schlägt der GOTO-Hunter zu: Code: | CLS
DO
taste$ = UCASE$(INKEY$)
IF taste$ = CHR$(65) AND WeiterA <> 1 THEN
PRINT "a wurde gedr?ckt"
WeiterA = 1
END IF
IF taste$ = CHR$(76) AND WeiterB <> 1 THEN
PRINT "l wurde gedr?ckt"
WeiterB = 1
END IF
LOOP UNTIL WeiterA = 1 AND WeiterB = 1 | Die Funktion UCase$() wandelt Buchstaben in Großbuchstaben um..
..steht aber auch in der Hilfe zu QB45Ger und bestimmt auch in der MonsterFAQ
Der Code ist übersichtlich und funktioniert.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
RaideR
Anmeldungsdatum: 15.09.2006 Beiträge: 21
|
Verfasst am: 02.02.2007, 16:18 Titel: |
|
|
ytwinky hat Folgendes geschrieben: | ..und wieder schlägt der GOTO-Hunter zu: Code: | CLS
DO
taste$ = UCASE$(INKEY$)
IF taste$ = CHR$(65) AND WeiterA <> 1 THEN
PRINT "a wurde gedr?ckt"
WeiterA = 1
END IF
IF taste$ = CHR$(76) AND WeiterB <> 1 THEN
PRINT "l wurde gedr?ckt"
WeiterB = 1
END IF
LOOP UNTIL WeiterA = 1 AND WeiterB = 1 | Die Funktion UCase$() wandelt Buchstaben in Großbuchstaben um..
..steht aber auch in der Hilfe zu QB45Ger und bestimmt auch in der MonsterFAQ
Der Code ist übersichtlich und funktioniert.. |
jop kann ich bestätigen das er übersichtlich ist und funktioniert
aber wir hatten UCASE$ noch net...
kann mir denn vll einer sagen was an meinem programm falsch ist? |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 02.02.2007, 16:54 Titel: |
|
|
Das Problem wird sein, dass du deinen IF..THEN..ELSE-Block brichst. Wurde "a" gedrückt, so kommt ja durch das Goto immer die Zeile WeiterAgo. Der Zeile folgt aber ein ElseIF - ein ElseIf, dem kein IF THEN vorrausgeht, weils ja übergangen wird. Vielleicht wird daduch die ELSE-Abfrage, in der die "L"-Überprüfung stattfindet, übergangen.
Du könntest ganz auf das Else verzichten und zwei einfache IF-Blöcke machen.
Hier Blitzbasic-Code (weil ich zu faul bin QB zu starten)
Code: | Cls
Repeat
taste=GetKey() ;Inkey$
If WeiterA = 1 Then Goto WeiterAgo
If taste = 65 Or taste = 97 Then
Print "a wurde gedrückt"
WeiterA = 1
End If
.WeiterAgo
If WeiterB = 1 Then Goto WeiterBgo
If taste = 76 Or taste = 108 Then
Print "l wurde gedrückt"
WeiterB = 1
End If
.WeiterBgo
Until WeiterA = 1 And WeiterB = 1 Or KeyDown(1)
WaitKey
End |
_________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
RaideR
Anmeldungsdatum: 15.09.2006 Beiträge: 21
|
Verfasst am: 02.02.2007, 18:34 Titel: |
|
|
jop das könnte sein mit der unterbrechung der if schleife
danke an alle  |
|
Nach oben |
|
 |
|