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:

Kleines Problem mit goto ( bin mir aber auch net sicher)

 
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
RaideR



Anmeldungsdatum: 15.09.2006
Beiträge: 21

BeitragVerfasst am: 01.02.2007, 23:10    Titel: Kleines Problem mit goto ( bin mir aber auch net sicher) Antworten mit Zitat

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 zwinkern )
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 traurig


Zuletzt bearbeitet von RaideR am 01.02.2007, 23:12, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
proXy



Anmeldungsdatum: 29.01.2007
Beiträge: 6

BeitragVerfasst am: 01.02.2007, 23:49    Titel: Antworten mit Zitat

hallooo...

Obwohl ich auch noch eher Anfänger bin, kann ich dir schon jetzt von GOTO abraten zwinkern 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.. grinsen
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.. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 02.02.2007, 00:25    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 15.09.2006
Beiträge: 21

BeitragVerfasst am: 02.02.2007, 16:18    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 10.01.2005
Beiträge: 395

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

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RaideR



Anmeldungsdatum: 15.09.2006
Beiträge: 21

BeitragVerfasst am: 02.02.2007, 18:34    Titel: Antworten mit Zitat

jop das könnte sein mit der unterbrechung der if schleife
danke an alle Zunge rausstrecken
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 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