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:

GOTO <zahl%>
Gehe zu Seite 1, 2  Weiter
 
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
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 26.03.2008, 13:04    Titel: GOTO <zahl%> Antworten mit Zitat

Hallo!

Ich wollte...
Code:
GOTO zahl%

...machen, aber das geht ja nicht.

Wie kann ich es dann machen?
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.03.2008, 13:07    Titel: Antworten mit Zitat

Hallo,

GOTO sollte man grundsätzlich nicht machen. zwinkern Ein Glück, dass man das nicht auch noch mit variablen Zeilennummern machen kann. Man stelle sich mal vor, das ginge... Auweia... zwinkern

Gute Erklärungen, wie man es besser macht, finden sich hier:
- http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
- http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Abenteuerspiel.html

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
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 26.03.2008, 13:54    Titel: Antworten mit Zitat

Danke, funktioniert jetzt!
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 26.03.2008, 15:00    Titel: Antworten mit Zitat

Nur nochmal der Vollständigkeit halber.
Es gibt den Befehl ON..GOTO, der sowas ähnliches wie ein goto zahl% bewirkt.
Aber ich rate auch davon ab.
_________________
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
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 27.03.2008, 10:14    Titel: Antworten mit Zitat

Ich musste es doch noch anders machen, sonst funktioniert etwas anderes im Programm nicht.

Es kommen beim umwandeln in eine .EXE-Datei immer Fehler:

Einmal hier:
Code:
2 :
AUSWAHL2% = 1
DO
CLS
COLOR 15
PRINT
PRINT "        Hallo " + Username$ + " !!!"
PRINT
COLOR 2
PRINT STRING$(32, 219)
IF AUSWAHL2% = 1 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Addition           " + CHR$(219)
IF AUSWAHL2% = 2 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Subtraktion        " + CHR$(219)
IF AUSWAHL2% = 3 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Multiplikation     " + CHR$(219)
IF AUSWAHL2% = 4 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Division           " + CHR$(219)
COLOR 2
PRINT STRING$(32, 219)
PRINT
COLOR 4
PRINT STRING$(32, 219)
IF AUSWAHL2% = 5 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + "           Statistik          " + CHR$(219)
IF AUSWAHL2% = 6 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + "           Benutzer wechseln  " + CHR$(219)
COLOR 4
PRINT STRING$(32, 219)
PRINT
COLOR 3
PRINT STRING$(32, 219)
IF AUSWAHL2% = 7 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Update             " + CHR$(219)
IF AUSWAHL2% = 8 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Hilfe              " + CHR$(219)
IF AUSWAHL2% = 9 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Einstellungen      " + CHR$(219)
COLOR 3
PRINT STRING$(32, 219)
PRINT
COLOR 8
PRINT STRING$(32, 219)
IF AUSWAHL2% = 10 THEN COLOR 15 ELSE COLOR 8
PRINT CHR$(219) + "           Beenden            " + CHR$(219)
COLOR 8
PRINT STRING$(32, 219)
SLEEP
taste$ = INKEY$
IF taste$ = CHR$(0) + "H" THEN AUSWAHL2% = AUSWAHL2% - 1
IF taste$ = CHR$(0) + "P" THEN AUSWAHL2% = AUSWAHL2% + 1
IF AUSWAHL2% < 1 THEN AUSWAHL2% = 1
IF AUSWAHL2% > 9 THEN AUSWAHL2% = 10
IF taste$ = CHR$(13) THEN EXIT DO
IF taste$ = CHR$(27) THEN END
LOOP
IF AUSWAHL2% = 1 THEN
sc% = 0
go% = 3
GOTO 11
END IF
IF AUSWAHL2% = 2 THEN
sc% = 0
go% = 4
GOTO 11
END IF
IF AUSWAHL2% = 3 THEN
sc% = 0
go% = 5
GOTO 11
END IF
IF AUSWAHL2% = 4 THEN
sc% = 0
go% = 6
GOTO 11
END IF
IF AUSWAHL2% = 5 THEN
sc% = 0
go% = 7
GOTO 11
END IF
IF AUSWAHL2% = 6 THEN
sc% = 0
go% = 1
GOTO 11
END IF
IF AUSWAHL2% = 7 THEN
sc% = 0
go% = 8
GOTO 11
END IF
IF AUSWAHL2% = 8 THEN
sc% = 0
go% = 9
GOTO 11
END IF
IF AUSWAHL2% = 9 THEN
sc% = 0
go% = 10
GOTO 11
END IF
IF AUSWAHL2% = 10 THEN
sc% = 0
go% = 12
GOTO 11
END IF


Und einmal hier:
Code:
11 :
PRINT
sc% = sc% + 1
startzeit! = TIMER
WHILE startzeit! + .1 > TIMER: WEND
IF sc% <> 30 THEN
GOTO 11
ELSE
IF go% = 1 THEN
GOTO 1
END IF
IF go% = 3 THEN
GOTO 3
END IF
IF go% = 4 THEN
GOTO 4
END IF
IF go% = 5 THEN
GOTO 5
END IF
IF go% = 6 THEN
GOTO 6
END IF
IF go% = 7 THEN
GOTO 7
END IF
IF go% = 8 THEN
GOTO 8
END IF
IF go% = 9 THEN
GOTO 9
END IF
IF go% = 10 THEN
GOTO 10
END IF
IF go% = 12 THEN
GOTO 12
END IF
END IF


Wie kann ich die Fehler beheben?

Die Fehlermeldung ist immer irgentetwas mit IF/GO%/END IF OHNE BLOG IF?!?!?!
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 27.03.2008, 10:46    Titel: Antworten mit Zitat

Kleiner Exkurs zu strukturierter Programmierung... zwinkern

1. Denk Dir für die Sprunglabels sinnvolle Bezeichnungen aus. Mit "11:" kann keiner was anfangen, und wenn Du mal größeren Code hast, kommst Du selbst durcheinander.

2. Laß halt mal den Schwachsinn mit den Gotos. Im ersten Code-Tag hast Du 9 mal
Code:
"goto 11"
stehen, und schreibst dann dann den Befehl an 11: ins Hauptprogramm. Hättest Du stattdessen eine Sub geschrieben, die Du statt "goto 11" aufrufst, wäre das viel sinnvoller.
3. Außerdem muß man das nicht in jedem if-Zweig aufrufen. Dort stehen nur die Anweisungen, die tatsächlich von der If-Bedingung abhängen. Danach kannst Du die Sub "goto 11" hinter das EndIf setzen und hast es dann nur einmal im Text.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 27.03.2008, 13:03    Titel: Antworten mit Zitat

Ein Paradebeispiel übrigens für ein Unterprogramm mit einer Parameterübergabe wie
Code:
SUB Auswahlmenue(titel$, punkte$(), balkenpos%, ende%)

Ich kann sonst ein Beispiel dazu zusammenstellen. Ansonsten siehe dazu auch

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BildschirmMasken.html

aus meiner berühmten Sammlung.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 27.03.2008, 13:42    Titel: Antworten mit Zitat

@Elektronix:
@1:

Ok, werde ich machen zwinkern

@2/3:

So?:
Code:
2 :
AUSWAHL2% = 1
DO
CLS
COLOR 15
PRINT
PRINT "        Hallo " + Username$ + " !!!"
PRINT
COLOR 2
PRINT STRING$(32, 219)
IF AUSWAHL2% = 1 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Addition           " + CHR$(219)
IF AUSWAHL2% = 2 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Subtraktion        " + CHR$(219)
IF AUSWAHL2% = 3 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Multiplikation     " + CHR$(219)
IF AUSWAHL2% = 4 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Division           " + CHR$(219)
COLOR 2
PRINT STRING$(32, 219)
PRINT
COLOR 4
PRINT STRING$(32, 219)
IF AUSWAHL2% = 5 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + "           Statistik          " + CHR$(219)
IF AUSWAHL2% = 6 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + "           Benutzer wechseln  " + CHR$(219)
COLOR 4
PRINT STRING$(32, 219)
PRINT
COLOR 3
PRINT STRING$(32, 219)
IF AUSWAHL2% = 7 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Update             " + CHR$(219)
IF AUSWAHL2% = 8 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Hilfe              " + CHR$(219)
IF AUSWAHL2% = 9 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Einstellungen      " + CHR$(219)
COLOR 3
PRINT STRING$(32, 219)
PRINT
COLOR 8
PRINT STRING$(32, 219)
IF AUSWAHL2% = 10 THEN COLOR 15 ELSE COLOR 8
PRINT CHR$(219) + "           Beenden            " + CHR$(219)
COLOR 8
PRINT STRING$(32, 219)
SLEEP
taste$ = INKEY$
IF taste$ = CHR$(0) + "H" THEN AUSWAHL2% = AUSWAHL2% - 1
IF taste$ = CHR$(0) + "P" THEN AUSWAHL2% = AUSWAHL2% + 1
IF AUSWAHL2% < 1 THEN AUSWAHL2% = 1
IF AUSWAHL2% > 9 THEN AUSWAHL2% = 10
IF taste$ = CHR$(13) THEN EXIT DO
IF taste$ = CHR$(27) THEN END
LOOP
IF AUSWAHL2% = 1 THEN go% = 3
IF AUSWAHL2% = 2 THEN go% = 4
IF AUSWAHL2% = 3 THEN go% = 5
IF AUSWAHL2% = 4 THEN go% = 6
IF AUSWAHL2% = 5 THEN go% = 7
IF AUSWAHL2% = 6 THEN go% = 1
IF AUSWAHL2% = 7 THEN go% = 8
IF AUSWAHL2% = 8 THEN go% = 9
IF AUSWAHL2% = 9 THEN go% = 10
IF AUSWAHL2% = 10 THEN go% = 12
sc% = 0
GOTO 11
Code:
11 :
PRINT
sc% = sc% + 1
startzeit! = TIMER
WHILE startzeit! + .1 > TIMER: WEND
IF sc% <> 30 THEN
GOTO 11
ELSE
IF go% = 1 THEN GOTO 1
IF go% = 3 THEN GOTO 3
IF go% = 4 THEN GOTO 4
IF go% = 5 THEN GOTO 5
IF go% = 6 THEN GOTO 6
IF go% = 7 THEN GOTO 7
IF go% = 8 THEN GOTO 8
IF go% = 9 THEN GOTO 9
IF go% = 10 THEN GOTO 10
IF go% = 12 THEN GOTO 12
END IF


@dreael:
Werde es dann mal versuchen, wenn das mit dem GOTO geht zwinkern
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 27.03.2008, 13:54    Titel: Antworten mit Zitat

Hallo

Interessant wäre, was dort passiert, wo diese ganzen GOTOs hinspringen. Wenn dort immer ähnliche Aktionen ausgeführt werden, kann man da sicher einiges zusammenfassen und vereinfachen. Dann müsstest du erst gar nicht so oft verzweigen.

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 27.03.2008, 14:05    Titel: Antworten mit Zitat

Die GOTOs gehen dort hin:
1: Benutzerverwaltung
2: Hauptmenü
3: +
4: -
5: *
6: /
7: Statistik
8: Update(Einfach ne Datumüberprüfung)
9: Hilfe
10: Einstellungen
11: Das Hauptmenü soll sich nach oben schieben
12: Beenden

Ähnlich Aktionen wären +-* und /.
Ich werde dann mal versuchen, dass man die 4 zusammenfasst...
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 27.03.2008, 14:07    Titel: Antworten mit Zitat

Hier noch ein Verbesserungsvorschlag: Statt

Code:
IF AUSWAHL2% = 1 THEN go% = 3
IF AUSWAHL2% = 2 THEN go% = 4
IF AUSWAHL2% = 3 THEN go% = 5
IF AUSWAHL2% = 4 THEN go% = 6
IF AUSWAHL2% = 5 THEN go% = 7


schreibt man
Code:

If Auswahl% >=1 AND Auswahl% <=5 then
go% = Auswahl% +2

_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 27.03.2008, 14:45    Titel: Antworten mit Zitat

Es geht leider immer noch nicht.

Das Problem sind die GOTOs und die go%s...

Was kann man noch machen, dass es geht?


###Beitrag 100
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 27.03.2008, 15:07    Titel: Antworten mit Zitat

"geht immer noch nicht" ist eine sehr schwammige Fehlerbeschreibung. WAS genau geht nicht?


Wie schon gesagt: Statt der vielen Gotos schreibt man Sub()s, die die Aufgaben übernehmen. Bei Deiner Anwendung wäre das sogar passender. Die Variablen können dabei ByRef übergeben werden, damit sie im Hauptprogramm entsprechend angepaßt bleiben. (Ah, Moment, ich glaube, das ist in QBasic sogar standard.)
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.03.2008, 15:34    Titel: Antworten mit Zitat

Ja, ByRef is standard.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 28.03.2008, 17:30    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
"geht immer noch nicht" ist eine sehr schwammige Fehlerbeschreibung. WAS genau geht nicht?

Ich habe einmal einen Screenshot gemacht:

Ich versuchs später einmal mit SUBs...

€dit:
Ähhhh, mit den SUBs weiß ich nicht genau, wie ich das programmieren kann?!?!?!
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
dreael
Administrator


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

BeitragVerfasst am: 29.03.2008, 10:54    Titel: Antworten mit Zitat

Seb hat Folgendes geschrieben:
€dit:
Ähhhh, mit den SUBs weiß ich nicht genau, wie ich das programmieren kann?!?!?!

Ohne viel Kommentar:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html

@Seb: Arbeite am besten einmal alles von A bis Z durch!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 29.03.2008, 22:52    Titel: Antworten mit Zitat

Code:
DECLARE SUB go(go%)

Code:
2 :
AUSWAHL2% = 1
DO
CLS
COLOR 15
PRINT
PRINT "        Hallo " + Username$ + " !!!"
PRINT
COLOR 2
PRINT STRING$(32, 219)
IF AUSWAHL2% = 1 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Addition           " + CHR$(219)
IF AUSWAHL2% = 2 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Subtraktion        " + CHR$(219)
IF AUSWAHL2% = 3 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Multiplikation     " + CHR$(219)
IF AUSWAHL2% = 4 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + "           Division           " + CHR$(219)
COLOR 2
PRINT STRING$(32, 219)
PRINT
COLOR 4
PRINT STRING$(32, 219)
IF AUSWAHL2% = 5 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + "           Statistik          " + CHR$(219)
IF AUSWAHL2% = 6 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + "           Benutzer wechseln  " + CHR$(219)
COLOR 4
PRINT STRING$(32, 219)
PRINT
COLOR 3
PRINT STRING$(32, 219)
IF AUSWAHL2% = 7 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Update             " + CHR$(219)
IF AUSWAHL2% = 8 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Hilfe              " + CHR$(219)
IF AUSWAHL2% = 9 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + "           Einstellungen      " + CHR$(219)
COLOR 3
PRINT STRING$(32, 219)
PRINT
COLOR 8
PRINT STRING$(32, 219)
IF AUSWAHL2% = 10 THEN COLOR 15 ELSE COLOR 8
PRINT CHR$(219) + "           Beenden            " + CHR$(219)
COLOR 8
PRINT STRING$(32, 219)
SLEEP
taste$ = INKEY$
IF taste$ = CHR$(0) + "H" THEN AUSWAHL2% = AUSWAHL2% - 1
IF taste$ = CHR$(0) + "P" THEN AUSWAHL2% = AUSWAHL2% + 1
IF AUSWAHL2% < 1 THEN AUSWAHL2% = 1
IF AUSWAHL2% > 9 THEN AUSWAHL2% = 10
IF taste$ = CHR$(13) THEN EXIT DO
IF taste$ = CHR$(27) THEN END
LOOP
go

Code:
SUB go
go% = AUSWAHL2% #####wie soll ich das dann hier machen???
sc% = 0
GOTO 11
END SUB

So ungefähr?
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 30.03.2008, 15:07    Titel: Antworten mit Zitat

Mit GOTO aus einer SUB heraus zu springen kann u. U. fatal werden (und wird mit etwas Glück auch gar nicht funktionieren). Besser so:
Code:

DECLARE SUB go(eingabe$)
DO
  CLS
  COLOR 15
  PRINT
  PRINT "        Hallo " + Username$ + " !!!"
  PRINT
  'usw. - alles was zum angezeigten Menü dazugehört

  taste$ = INPUT$(1)
  IF taste$ = chr$(27) then exit do
  go(taste$)
LOOP
END

SUB go(eingabe$)
  IF eingabe$ = "1" THEN
    ' tue das, was beim Drücken der Taste "1" gemacht werden soll
  ELSEIF eingabe$ = "2" THEN
    ' tue das, was beim Drücken der Taste "2" gemacht werden soll
    ' usw. usf.
  END IF
END SUB


Noch wesentlich besser ist folgendes:

Code:

DECLARE SUB go1
DECLARE SUB go2
DO
  CLS
  COLOR 15
  PRINT
  PRINT "        Hallo " + Username$ + " !!!"
  PRINT
  'usw. - alles was zum angezeigten Menü dazugehört

  taste$ = INPUT$(1)
  IF taste$ = "1" THEN
    go1
  ELSEIF taste$ = "2" THEN
    go2
    ' usw. usf.
  END IF
LOOP UNTIL taste$ = CHR$(27)
END

SUB go1
  ' tue das, was beim Drücken der Taste "1" gemacht werden soll
END SUB

SUB go2
  ' tue das, was beim Drücken der Taste "2" gemacht werden soll
END SUB

(natürlich nimmst du statt go1 und go2 lieber sprechende Namen)
Beide Varianten benötigen überhaupt kein GOTO mehr.

Noch besser wäre statt des IF ... ELSEIF ... END IF vermutlich ein SELECT CASE
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 30.03.2008, 19:23    Titel: Programmgerüst zusammengestellt Antworten mit Zitat

Inzwischen ist das Menübeispiel fertig:

http://beilagen.dreael.ch/QB/MENUE.BAS

@Seb: Probiere es ruhig einmal von A bis Z aus. Selbstverständlich kannst Du es als Grundgerüst für Deine Anwendung einsetzen.

Ansonsten Bemerkungen dazu:
Kern ist eine SUB-Routine names Menue(), welcher man als Parameter den Titel wie "Hauptauswahl", die einzelnen Menüpunkte, Balkenposition (ist eine In+Out-Variable, d.h. gibt zu Beginn die Vorgabe-Balkenposition an und retourniert am Schluss die effektiv gewählte Position) und Balkenwert bei <Esc> übergibt. Bei den einzelnen Menüpunkten habe ich lieber auf einen String zurückgegriffen, welchem man sämtliche auswählbaren Punkte mit "|" separiert übergibt. Ferner kann ein hervorgehobener Buchstabe optional mit "_" definiert werden.

Der Hauptprogrammteil soll gleichzeitig zeigen, dass es vollkommen ohne GOTO geht - ist wieder einmal ein typischer Fall für SELECT CASE.

Als zweite Benutzeroberflächen-SUB kommt noch Nachricht() zum Einsatz, um ganz einfache MsgBox()-en wie in Windows darstellen zu können (Text + Hintergrundfarbe - letzteres dem vbInformation, vbCritical usw. d.h. Typ, ob Information oder Warnung entsprechend).

Die Dummy()-SUB ist, wie der Name sagt, nur ein reiner Platzhalter, d.h. überall dort könntest Du Deine geplanten Übungsroutinen hineinprogrammieren.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 31.03.2008, 16:52    Titel: Antworten mit Zitat

Vielen Dank!!!

Wollte gerade mein ganzes Programm mit SUBs schreiben, aber wieder eine Meldung:


_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
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
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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