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:

Fehler in SUBs
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: 09.04.2008, 19:39    Titel: Fehler in SUBs Antworten mit Zitat

Hallo!

Ich wollte jetzt mein ganzes Programm in SUBs anstatt GOTOs schreiben, aber folgendes funktioniert nicht:

--- Sounds werden nicht abgespielt
--- Dateien werden beim Einlesen nicht erkannt

Vorher, als ich noch keine SUBs verwendet habe, funktionierte alles.

Zu Sounds:
Code:
IF antwort% = 1zahl% + 2zahl% THEN PLAY "ceg" ELSE SOUND 90, 6


Zu Dateien:
Code:
OPEN UserID$ + "fehler.txt" FOR OUTPUT AS #11

Obwohl die Datei existiert kommt immer eine Meldung:
"Datei wurde nicht gefunden."

Woran könnte das liegen und wie kann man es beheben?
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 09.04.2008, 19:42    Titel: Antworten mit Zitat

Deine Codeschnippsel sagen nichts über das Problem aus; nur, dass du eventuell die variablen, die du in den SUBs verwenden willst, im Hauptprogramm deklariert hast und sie deswegen nicht in den SUBs ansprechen kannst. Um das zu tun, müsstest du im Hauptprogramm
Code:
DIM SHARED <variablenname>
einfügen, dass variablen aus dem hauptprogramm auch im unterprogramm verfügbar sind. Oder du übergibst sie als parameter.
_________________
» 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: 09.04.2008, 19:49    Titel: Antworten mit Zitat

Vielen Dank für die schnelle Antwort!!!

Es funktioniert jetzt...
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 13.04.2008, 11:06    Titel: Antworten mit Zitat

Noch eine Frage:

Bei diesem Code kommt nach dem 2. Aufruf immer eine Meldung:

Zitat:
Stapelplatz reicht nicht aus.


Code:
SUB menugo
PRINT
sc% = sc% + 1
startzeit! = TIMER
WHILE startzeit! + .1 > TIMER: WEND
IF sc% <> 30 THEN menugo
IF AUSWAHL2% = 1 THEN plusmenu
IF AUSWAHL2% = 2 THEN minusmenu
IF AUSWAHL2% = 3 THEN malmenu
IF AUSWAHL2% = 4 THEN geteiltmenu
IF AUSWAHL2% = 5 THEN statistik
IF AUSWAHL2% = 6 THEN benutzer
IF AUSWAHL2% = 7 THEN update
IF AUSWAHL2% = 8 THEN hilfe
IF AUSWAHL2% = 9 THEN einstellungen
IF AUSWAHL2% = 10 THEN ende
END SUB

_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 13.04.2008, 12:06    Titel: Antworten mit Zitat

du verschatelst deine SUBs zu tief ineinander. wenn eine SUB aufgerufen wurde, sollte die auch wieder beendet werden. also nicht das folgende prinzip anwenden:

Code:

sub menue
  do
    input zahl
    call option(zahl)
  loop
end sub

sub option(zahl)
  print "du hast option " & zahl & " gewählt."
  menue
end sub

denn dadurch wird ein endlos hoher stapel von den funktionen menue->option->menue->option->menue->option->menue->option->... erstellt. Wenn die SUB option abgearbeitet wurde, kehrt sie automatisch in die SUB menue zurück.

Du hast also genau die falsche SUB gepostet, wobei auch die sub menugo solch einen endlosstapel erzeugen kann (sie ruft sich selbst auf)
_________________
» 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: 13.04.2008, 20:53    Titel: Antworten mit Zitat

Und wie kann man das dann richtig machen?
_________________
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: 13.04.2008, 21:06    Titel: Antworten mit Zitat

Indem du in der SUB option den Aufruf menue weglässt. Dann beendet option normal und springt anschließend an die Stelle zurück, von der es aufgerufen wurde.
_________________
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: 13.04.2008, 21:17    Titel: Antworten mit Zitat

Versuche an dieser Stelle mein Menü-Beispiel sowie meinen Artikel zu verstehen: SUB-Unterprogramme führen immer eine Teilaufgabe aus und kehren dabei wieder ins Hauptprogramm zurück.

Nehmen wir die SUB-Routine Menue() aus meinem Beispiel: Dort übergeben ich als Parameter, wie das darzustellende Menü auszusehen hat und lasse mir den vom Anwender effektiv gewählten Menüpunkt im dortigen Beispiel als Variable mp% zurückgeben. Deswegen existieren dort keine CALLs oder gar GOTOs auf irgendwelche konkrete Funktionen wie Additionsübungen, Multiplikationsübungen usw.

Beispiel: In Zeile 66 rufe ich das Menü als
Code:
Menue "Gewünschter Typ der Multiplikation", "_Einmaleins|_2-stellige Zahlen|_Dezimalbrüche|Gemeine _Brüche|_Zurück", mp2%, 4

auf. Programm springt dann auch zu Zeile 239 herunter, wobei alle übergebenen Parameter zur Verfügung stehen und entsprechend verarbeitet werden. Sobald der Benutzer mit <Enter> oder <Esc> seine Auswahl erledigt hat, springt das Unterprogramm zurück, wobei ich dort in mp2% den effektiv gewählten Menüpunkt erhalten habe. => Jetzt läuft das Programm ab Zeile 67 weiter, wo mit einem SELECT CASE dieser Menüpunkt entsprechend ausgewertet wird.

Auch bei der Nachricht()-SUB nicht anders: Dieses wird mit Parametern (Nachricht und Farbe in diesem Fall) aufgerufen, stellt diese grafisch zentriert dar und kehrt nach dem Tastendruck wieder oben ins Hauptprogramm zurück.

Sonst noch einmal: Du musst Deine jetzige GOTO-Denkweise komplett beerdigen und stattdessen Dich mit dem Thema Aufteilung in unabhängige Teilaufgaben auseinandersetzen. Dieses Aufteilen hat üblicherweise auf dem Papier zu erfolgen, deswegen ist auch die analytische Phase im Software-Entwicklungsprozess so wichtig!

Der einzige Fall, wo CALL in einer SUB selber gemacht wird: Wenn das Unterprogramm ein anderes Unterprogramm selber als Werkzeug benötigt. Übrigens kannst Du schlussendlich beinahe jeden QB-Befehl wie SCREEN, LINE, PRINT usw. als Unterprogramm betrachten, und zwar eines, welches built-in (fest eingebaut) im QB-Interpreter/Compiler vorhanden ist.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


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

BeitragVerfasst am: 13.04.2008, 21:21    Titel: Antworten mit Zitat

Seb hat Folgendes geschrieben:
Und wie kann man das dann richtig machen?


Ganz ehrlich: Hast du meinen Beitrag gelesen?
Ich glaube ich antworte hier einfach gar nicht mehr, ich habe ganz genau beschrieben, was du nicht machen darfst und jetzt willst du höchstwahrscheinlich noch, dass ich den Sourcecode für dich schreibe?! Kopf schütteln

Zitat:
denn dadurch wird ein endlos hoher stapel von den funktionen menue->option->menue->option->menue->option->menue->option->... erstellt. Wenn die SUB option abgearbeitet wurde, kehrt sie automatisch in die SUB menue zurück.

_________________
» 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: 16.04.2008, 17:19    Titel: Antworten mit Zitat

Ich hab die Beiträge schon gelesen, aber ich verstehe das nicht ganz.

Ich wüsste ja nicht einmal, wie ich jetzt anfangen soll... weinen
_________________
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: 16.04.2008, 18:27    Titel: Antworten mit Zitat

SUBs zu verstehen ist auch nicht ganz so einfach, weil man dazu schon ein gutes Stück abstrahieren können muss.
Du machst beim Aufruf einer SUB (und auch beim Aufruf einer FUNCTION) gewissermaßen einen kurzen Ausflug an eine andere Stelle des Programmcodes und kehrst danach automatisch zurück. Ich schreibe das mal mit Zeilennummern, nur zur Verdeutlichung:

Code:
1:   DECLARE SUB test
2:   PRINT "Du befindest dich am Beginn des Hauptprogramms."
3:   test
4:   PRINT "Du befindest dich am Ende des Hauptprogramms."
5:   END

6:   SUB test
7:     PRINT "Du bist jetzt in der SUB."
8:   END SUB

Das Programm startet bei Zeile 1 und 2 und springt dann in Zeile 3 hinunter zu Zeile 6. Nach Zeile 7 und 8 springt es automatisch zurück, und es geht in Zeile 4 weiter.

Um zu wissen, wohin das Programm nach der Ausführung der SUB zurückspringen muss, muss es sich das merken, also speichern. Wenn du mehrere SUBs verschachtelst, muss auch jedesmal die Rücksprungadresse gespeichert werden. Das kann dann zum Überlauf führen:
Code:
1:   test1

2:   SUB test1
3:     test2
4:   END SUB
5:   SUB test2
6:     test1
7:   END SUB

Das Hauptprogramm ruft test1 auf (und muss sich dazu die Rücksprungadresse merken)
test1 ruft test2 auf (und muss sich dazu die Rücksprungadresse merken)
test2 wird nicht beendet, sondern ruft test1 auf (und muss sich dazu eine neue Rücksprungadresse merken)
test1 wird nicht beendet, sondern ruft test2 auf (und muss sich dazu eine neue Rücksprungadresse merken)
test2 wird nicht beendet, sondern ruft test1 auf (und muss sich dazu eine neue Rücksprungadresse merken)
test1 wird nicht beendet, sondern ruft test2 auf (und muss sich dazu eine neue Rücksprungadresse merken)
usw. usf.

Du siehst, dass hier ständig neuer Speicherplatz benötigt wird, und sobald der aus ist (und da das Programm hier sehr schnell abläuft, ist das auch sehr schnell der Fall), beendet das Programm mit einem Fehler.
_________________
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
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 18.04.2008, 17:20    Titel: Antworten mit Zitat

Jetzt habe ich es kappiert...

Aber wie kann ich dann meinen Fehler beheben?

Mit GOTOs wollte ich es nicht mehr machen...

(Also nur das Menü, weil im ganzen anderen Programm habe ich es schon richtig geändert)
_________________
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: 18.04.2008, 21:10    Titel: Antworten mit Zitat

Seb hat Folgendes geschrieben:
Aber wie kann ich dann meinen Fehler beheben?

Bezogen auf Dein Beispiel:
Seb hat Folgendes geschrieben:
Code:
IF sc% <> 30 THEN menugo
IF AUSWAHL2% = 1 THEN plusmenu
IF AUSWAHL2% = 2 THEN minusmenu
IF AUSWAHL2% = 3 THEN malmenu
IF AUSWAHL2% = 4 THEN geteiltmenu
IF AUSWAHL2% = 5 THEN statistik
IF AUSWAHL2% = 6 THEN benutzer
IF AUSWAHL2% = 7 THEN update
IF AUSWAHL2% = 8 THEN hilfe
IF AUSWAHL2% = 9 THEN einstellungen
IF AUSWAHL2% = 10 THEN ende

Diese Verzweigung gehört immer ins Hauptprogramm! Siehe dazu mein Beispiel.

Dein Unterprogramm menugo() sollte entsprechend mit Parameter erweitert werden, dabei sollte AUSWAHL% ein Rückgabeparameter geben - soll ja schliesslich ein unversell wiederverwendbarer Software-Baustein geben, den Du in sämtlichen Situationen, wo ein Menü erscheinen soll, aufrufen kannst. Dabei sorgen die Parameter dafür, dass gewisse Teile (z.B. die konkret anzuzeigenden Menüpunkte) variiert werden können. Auch hier gleich wieder der Verweis auf mein Beispiel, wo genau dies zuhauf gemacht wird!

Sonst wie ich es allgemein handhabe: Sobald eine Routine mehrfach verwendet werden kann, packe ich es in eine SUB bzw. FUNCTION. Wenn es dagegen an einer einzigen Stelle und sehr situationsspezifisch ist, programmiere ich es in der Regel inline aus, d.h. in diesem Fall direkt im entsprechenden CASE-Block.
_________________
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: 21.04.2008, 16:51    Titel: Antworten mit Zitat

Vielen Dank!!!

Und das mit dem "scrool down" habe ich so gelöst:

Code:
.
.
.
sc% = 0
 DO
  PRINT
   sc% = sc% + 1
    startzeit! = TIMER
    WHILE startzeit! + .1 > TIMER: WEND
 LOOP UNTIL sc% = 30
.
.
.

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



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 02.05.2008, 19:44    Titel: Antworten mit Zitat

Und schon wieder ein Fehler bei der .EXE-Datei erstellen: traurig

Code:
007A 004C DO
^ Überlauf des Programmspeichers


Was habe ich da falsch gemacht?
So viele DOs habe ich ja nicht im Programm!
_________________
MfG
Seb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Seb



Anmeldungsdatum: 29.11.2006
Beiträge: 120
Wohnort: Henfenfeld

BeitragVerfasst am: 13.06.2008, 18:49    Titel: Antworten mit Zitat

Weiß jemand, wie ich den Fehler beheben 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: 13.06.2008, 20:17    Titel: Antworten mit Zitat

Seb hat Folgendes geschrieben:
Code:
007A 004C DO
^ Überlauf des Programmspeichers

Was habe ich da falsch gemacht?

Mit ziemlicher Sicherheit existiert irgendwo so etwas wie beispielsweise einen GOSUB ohne RETURN, (versehentlich!) rekursiver SUB-Programmaufruf.

Am besten einmal uns den bisherigen Zwischenstand Deiner .BAS-Datei ins Forum posten (Code-Tags nicht vergessen) oder bei grösserem Umfang diese auf einen Webspace hochladen und Download-Link hier posten, damit wir es kurz analysieren können.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 13.06.2008, 20:30    Titel: Antworten mit Zitat

Du rufst rekursiv eine Unterfunktion auf. Bedeutet: Eine Funktion enthält eine Schleife, in der die gleiche Funktion wieder aufgerufen wird. Wenn die Schleife keine Abbruchbedingung entählt, verschachtelt sich das Programm so lange, bis der Stack voll ist und überläuft.
_________________
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: 16.06.2008, 20:45    Titel: Antworten mit Zitat

Ok!

Liegt es nur an DO oder auch an IF?

Denn IFs habe ich schon viele, z.b.:

Code:
startzeit! = TIMER
WHILE startzeit! + 1 > TIMER: WEND
RANDOMIZE TIMER
IF plusrechnenauswahl% = 050 THEN
ZAHL1% = INT(RND * 49) + 1
ZAHL2% = INT(RND * 49) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
IF plusrechnenauswahl% = 0100 THEN
ZAHL1% = INT(RND * 99) + 1
ZAHL2% = INT(RND * 99) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
IF plusrechnenauswahl% = 0500 THEN
ZAHL1% = INT(RND * 499) + 1
ZAHL2% = INT(RND * 499) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
IF plusrechnenauswahl% = 0999 THEN
ZAHL1% = INT(RND * 999) + 1
ZAHL2% = INT(RND * 999) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
IF plusrechnenauswahl% = 150 THEN
ZAHL1% = INT(-RND * 49) + 1
ZAHL2% = INT(-RND * 49) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+ ("; ZAHL2%; ") ="
END IF
IF plusrechnenauswahl% = 1100 THEN
ZAHL1% = INT(-RND * 99) + 1
ZAHL2% = INT(-RND * 99) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+ ("; ZAHL2%; ") ="
END IF
IF plusrechnenauswahl% = 1500 THEN
ZAHL1% = INT(-RND * 499) + 1
ZAHL2% = INT(-RND * 499) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+ ("; ZAHL2%; ") ="
END IF
IF plusrechnenauswahl% = 1999 THEN
ZAHL1% = INT(-RND * 999) + 1
ZAHL2% = INT(-RND * 999) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+ ("; ZAHL2%; ") ="
END IF
IF plusrechnenauswahl% = 250 THEN
ZAHL1% = INT(-RND * 49) + 1
ZAHL2% = INT(RND * 49) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
IF plusrechnenauswahl% = 2100 THEN
ZAHL1% = INT(-RND * 99) + 1
ZAHL2% = INT(RND * 99) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
IF plusrechnenauswahl% = 2500 THEN
ZAHL1% = INT(-RND * 499) + 1
ZAHL2% = INT(RND * 499) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
IF plusrechnenauswahl% = 2999 THEN
ZAHL1% = INT(-RND * 999) + 1
ZAHL2% = INT(RND * 999) + 1
PRINT CHR$(219) + " "; ZAHL1%; "+"; ZAHL2%; "="
END IF
PRINT STRING$(27, 219)
PRINT
INPUT ZAHLA1%
IF ZAHLA1% = ZAHL1% + ZAHL2% THEN PRINT "---richtig---" ELSE PRINT "---falsch---"


Zu DO:

Dieses Menü tritt 4x, wenn auch in anderer Form auf:

Code:
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
sc% = 0
DO
PRINT
sc% = sc% + 1
startzeit! = TIMER
WHILE startzeit! + .1 > TIMER: WEND
LOOP UNTIL sc% = 30
IF AUSWAHL2% = 1 THEN plusmenu
IF AUSWAHL2% = 2 THEN minusmenu
IF AUSWAHL2% = 3 THEN malmenu
IF AUSWAHL2% = 4 THEN geteiltmenu
IF AUSWAHL2% = 5 THEN statistik
IF AUSWAHL2% = 6 THEN GOTO 1
IF AUSWAHL2% = 7 THEN update
IF AUSWAHL2% = 8 THEN hilfe
IF AUSWAHL2% = 9 THEN einstellungen
IF AUSWAHL2% = 10 THEN ende
GOTO 2

_________________
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: 16.06.2008, 23:09    Titel: Antworten mit Zitat

Am IF selbst liegt es mit Sicherheit nicht, vielleicht aber an den darin aufgerufenen SUBs. Verlässt du diese ordentlich (also durch ein RETURN bzw. das END SUB) oder verlässt du sie, indem du eine andere SUB aufrufst? Im letzteren Fall wird dies die Ursache des Problems sein.
_________________
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
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