Also ich hab vor mehrere while schleifen miteinander zu verknüpfen, also untereinander.
Bzw. einen Teil hab ich schon fertig.
Kann man aus dieser While Schleife (da kommt eine If bedingung) auch herausspringen, sodaß es nach dem Wend weitermacht?
BREAK? (vielleicht eine Lösung)
Ich glaub nicht wirklich.
Dumme Idee: Wenn z.B.
WHILE i<10
...
WEND
dann i auf nen Wert über 10 setzen?
Wenn der Ausdruck im Schleifenkopf nicht mehr zutrifft wird die Schleife verlassen und die nächste wird durchlaufen. Meinst du so?
Loop=1 //Mit Schleife 1 anfangen
//Loop 1
WHILE Loop=1
PRINT "Schleife 1 ",100,100
//Und raus hier mit Taste A
IF KEY(30) THEN Loop=2
SHOWSCREEN
WEND
//Loop 2
WHILE Loop=2
PRINT "Schleife 2 ",100,100
//Und raus hier mit Taste S
IF KEY(31) THEN Loop=3
SHOWSCREEN
WEND
//Loop 3
WHILE Loop=3
PRINT "Schleife 3 ",100,100
//Und jetzt ganz raus :)
IF KEY(32) THEN END
SHOWSCREEN
WEND
Oder hab ich dich missverstanden. Sry ist ja schon spät für mich. :)
Cheers
Im Schleifenkopf geht nicht....
So mein ich das.
WHILE a<=variable
FOR i=0 TO 3
"code"
NEXT
IF "irgendwas"
"nochirgendwas"
´Exit´-->hier rausspringen
ENDIF
a = a + 1
WEND
´weiter im Code´
in so einer verzwickten Situation ist ein 'GOTO endmarke:' schon gerechtfertigt, denke ich.
Auch wenn der Befehl an sich selbstverständlich böse bleibt ;)
Grüße, Tiuz
Jo. BREAK für eine Schleife. Goto für mehrere. Mach ich immer so. Oder ein "Jump_out_flag" setzen. Find ich aber doof.
Ich hatte Goto nur kurz in der Hilfe überflogen.
Und die Beschränkung gilt ja nur für Subs.
Also ist eine Funktion in der mehrere While...Wend vorkommen.
Und nur aus einer muss ich halt springen können.
Okay.Dann nehm ich GOTO.
Vielen Dank
dazu noch kurz ne FRage.
Sprungmarken werden aber vom restlichen code ignoriert, oder?
Also das Goto ist ja eine KANN Geschichte.
Es ist auch möglich, daß es die While Schleife normal beendet und dort vorbei muss.
Normal schon, ich weiß.....aber mein letztes Goto ist echt ewig her....
Sobald du Goto aufrufst springst du zur Sprungmarke.
Frage einen Wert ab und pack das Goto in die Abfrage, dann hast du auch kein problem!
nein das meinte ich nicht.
in der function die ich hab, ist eben die while schleife dort wird in einer if abfrage mittels goto herausgesprungen.
ist die if bedingung allerdings nicht erfüllt, geht es weiter in der while schleife bis dessen bedingung nicht mehr erfüllt ist.
dann würde es ja nach wend weiter gehen.
und eben nach diesem wend steht meine sprungmarke.
also ich wollte nur wissen ob das sprungmarke:
so auch noch beachtung findet, oder im normalen programmfluß keine rolle spielt.
aber das bekomm ich dann noch raus.
[edit] das gleiche habe ich jetzt auch bei einigen If bedingungen, so ein exit befehl wäre doch auch was, oder.
wird einfach überlesen
nein ich hab das schon verstanden.
mach ne schleife dort zu beginn zum beispiel eine if bedingung mit goto am ende, was dann da raus springt.
das ist mir schon klar.
ich meinte, ob, wenn die bedingung nicht erfüllt wird, also kein goto erfolgt, sondern die while schleife normal beendet wird via while bedingung, dann das folgende goto irgendeine rolle spielt im normalen fluß.
aber ich glaub nicht.
ist nur ein fähnchen am rand, was angesprungen werden kann, von woauchimmer.
ich hab das schon kapiert.
FOR i=0 TO 10000
a:
b:
c:
d:
NEXT
die Labels oben haben keinen Einfluss auf die Performance.
mit WHILE EXIT !
ach, haben wir ja nicht !
ganz vergessen.
nur ein EXIT für While und For Schleifen..... wäre da sinnvoll.
Quote from: peterpan on 2009-Mar-10
mit WHILE EXIT !
ach, haben wir ja nicht !
ganz vergessen.
Schwachsinn... und sinnlos!
Und mal wieder so ein sinnfreier post von dir... wird das jetzt zur Gewohnheit?
Hab schon lange keinen normalen Post mehr von dir gesehen, nurnoch so aufmüpfige Sachen...
Zukünftig lösche ich all diese ohne Angabe von Gründen!
Ausserdem, hättest du dich mal ein wenig mehr mit GLBasic beschäftigt, wüsstets du das BREAK eine While-Schleife unterbricht!
@ Heiko:
Wieso den, die erfüllt voll ihren Zweck sonst benutz BREAK !
Kleiner Test:
WHILE TRUE
PRINT "Test",10,10
SHOWSCREEN
KEYWAIT
BREAK
WEND
WHILE TRUE
PRINT "Test2",10,10
SHOWSCREEN
WEND
END
Si, si! Correcte!
BREAK unterbrincht alle Schleifen. Ich rate Dir dringent dazu einfach mal im Handbuch zu schmökern.
Naja in der Hilfe steht zwar, daß Break eine Schleife unterbricht, aber nicht in welcher Form.
Und da im Zusammenhang steht auch gleich Continue, wo man vermuten könne, daß das total zusammenhängt.
War also nicht sofort ersichtlich, trotz lesen in der Hilfe.
also so wäre es also richtig, richtig?
FUNCTION ImageInfo_ReadJPG:Buffer%, ImageFile%, ImageFileSize%
LOCAL i%, temp_j%, tempb%, tempa%, tempd%, tempf%, tempe%
LOCAL Pos = 0
LOCAL BType%
IsError = TRUE
WHILE Pos<=ImageFileSize-4
FILESEEK ImageFile, Pos, 1
FOR i=0 TO 3
READBYTE ImageFile, temp_j
POKEBYTE(Buffer, i, temp_j)
NEXT
IF (PEEKBYTE(Buffer,0) = 0xFF) AND (PEEKBYTE(Buffer,1) = 0xD8) AND (PEEKBYTE(Buffer,2) = 0xFF) AND (PEEKBYTE(Buffer,3) = 0xE0)
IsError = FALSE
BREAK
ENDIF
Pos = Pos + 1
WEND
IF IsError THEN RETURN FALSE
READWORD ImageFile, tempb
Pos = FILEPOSITION(ImageFile) + Swap16(tempb)
IsError = TRUE
FILESEEK ImageFile, Pos, 1
WHILE ENDOFFILE(ImageFile)=FALSE
READBYTE ImageFile, tempa
IF tempa = 0xFF
READBYTE ImageFile, BType
READWORD ImageFile, tempb
Pos = FILEPOSITION(ImageFile) + Swap16(tempb)
IF (BType >= 0xC0) AND (BType <= 0xC3)
READBYTE ImageFile, i
READWORD ImageFile, tempd
ImageInfo_Height = Swap16(tempd)
READWORD ImageFile, tempf
ImageInfo_Width = Swap16(tempf)
READBYTE ImageFile, tempe
ImageInfo_Depth = tempe * 8
ImageInfo_Type = imgtype_JPEG
IsError = FALSE
BREAK
ENDIF
FILESEEK ImageFile, Pos, 1
ENDIF
WEND
RETURN 1-IsError
ENDFUNCTION
Unterbricht die aktuelle FOR oder WHILE Schleife
Genauer kann man es ja garnicht mehr schreiben!
das war mir klar, aber was macht es nach der Unterbrechung?
BREAK=Pause, wartet irgendwo auf CONTINUE, whatever.....
Unterbricht die aktuelle FOR oder WHILE Schleife und führt den Code nach der jeweilig unterbrochenen Schleife fort.
Wäre einleuchtender.... ;/
Aber ist doch logisch, wenn eine Schleife unterbrochen wird, wo gehts dann hin?
Bestimmt nicht am Programmstart :D
Sollte jeden Programmierer klar sein, das ein Programm von oben nach unten durchläuft... ausser du machst Spagetticode(GOTO) :D
Hast ja Recht, ich hab wohl irgendwie das mit dem CONTINUE assoziert und zusammenhängend gesehen.....
War so eine Pause-Weiter-Überlegung....Egal, weiß es ja jetzt.