Continue will nicht mit Repeat-Until

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: Continue will nicht mit Repeat-Until

BeitragSo, Apr 08, 2012 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

der Befehl "Continue" treibt derzeit böse Spielchen mit mir. Folgender Code sollte in einer Endlosschleifen enden:
BlitzMax: [AUSKLAPPEN]
Repeat
Notify("Running...")
Continue
Until True


Aber ich bekomme die MessageBox nur einmal zu sehen. Bin ich jetzt doof? Continue soll doch zum Anfang der Schleife zurückspringen, oder nicht?

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Noobody

BeitragSo, Apr 08, 2012 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Continue springt zum Ende der Schleife. Dort steht in diesem Fall ein "Until True", welches sofort abbricht.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Der Eisvogel

BeitragSo, Apr 08, 2012 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann ist da ein Fehler in der Hilfe:
Zitat:
Continue causes program flow to return to the start of the enclosing While, Repeat or For program loop


Dann muss wohl eine Hilfsvariable her.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

DaysShadow

BeitragSo, Apr 08, 2012 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreh es halt um:

BlitzMax: [AUSKLAPPEN]
Repeat
Notify("Running...")
Continue
Until False


Läuft ewig bis du mit Exit raus springst.
Blessed is the mind too small for doubt

Der Eisvogel

BeitragSo, Apr 08, 2012 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist sogar ne ganz gute Idee, jedoch muss dann da noch ein Exit rein, damit das so funktioniert wie ich brauche. Danke dir!

BlitzMax: [AUSKLAPPEN]
Repeat
Notify("Running...")
Continue
...
Exit
Until False
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

PhillipK

BeitragSo, Apr 08, 2012 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
@Eisvogel:

Korrigier mich wenn ich falsch liege, aber so wie es da steht, läuft es endlos & "..." wird nie ausgeführt - Continue springt doch immer zum schleifenkopf, oder?

Propellator

BeitragSo, Apr 08, 2012 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Eben nicht, darum gehts ja im gesamten Thread.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Markus2

BeitragFr, Apr 13, 2012 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das Continue immer so verstanden das es was danach kommt überspringt.
Was Du jetzt hast kannste auch mit Goto lösen.

For i=1 To 20
If i Mod 2 Continue

dieser Teil wird hier übersprungen bei Continue

Next

#here

'...

Goto here


Statt Until True gibt es Forever

Jolinah

BeitragFr, Apr 13, 2012 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versteh den Sinn nicht ganz. Wenn du den Code danach sowieso nie ausführst weil er immer mit Continue übersprungen wird, dann kann man den Code doch auch einfach weglassen Wink

BlitzMax: [AUSKLAPPEN]
Repeat
Notify("Running...")

If something Then Exit

...

Forever


oder aber

BlitzMax: [AUSKLAPPEN]
Repeat
Notify("Running...")

If something Then Continue

...

If something_else Then Exit

...

Forever

Der Eisvogel

BeitragFr, Apr 13, 2012 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Grob sieht meine Anwendung so aus:

BlitzMax: [AUSKLAPPEN]
Repeat
Notify("Running...")
...
If Not condA Then Continue
If Not condB Then Continue
If Not condC Then Continue
...
Exit
Until False


Nur mit dem Unterschied, dass die Abfragen wesentlich komplizierter sind. Wenn eine Bedinungen jetzt nicht erfüllt ist, dann soll die Schleife erneut ausgeführt werden. Sind alle Bedingungen erfüllt, darf das Programm weitermachen.

Im Grunde ist es gleich dem hier:
BlitzMax: [AUSKLAPPEN]
Repeat
Notify("Running...")
Until condA And condB And condC


Jedoch sind meine Abfragen alle etwas komplizierter. Das Ergebnis einer Abfrage speicher ich in einer Variable, damit ich es danach abfragen kann. Nimmt man jetzt das zweite Beispielt, dann werden immer alle Abfragen ausgeführt, was ja eigentlich nicht nötig ist, wenn die erste Bedingungen nicht erfüllt ist, also will ich nach der ersten Abfrage abbrechen, was in Beispiel 1 der Fall ist.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

ZEVS

BeitragFr, Apr 13, 2012 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Falsch. BlitzMax optimiert das:
BlitzMax: [AUSKLAPPEN]
SuperStrict
Function func1:Int()
Print "func1"
Return False
End Function
Function func2:Int()
Print "func2"
Return False
End Function
If func1() And func2() Then Print "..."

Output:
Zitat:
func1


ZEVS

Der Eisvogel

BeitragFr, Apr 13, 2012 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das BlitzMax DAS optimiert ist mit klar, jedoch müsste ich dazu jede einzelen Abfrage in eine Funktion packen. Was sinnvoll wäre, wenn jede Abfrage seperat erfolgen würde, da sie aber teilweise aufeinander aufbauen, macht da auch eher weniger Sinn, da ich dann verschieden Sachen zwischenspeichern oder globale Variablen deklarieren müsste, wodurch der Code doch sehr unübersichtlich werden kann bei meine Anwendungsfall. Das jetzt aber ganz expliziet zu erläutern warum die andere Methode sinnvoller ist, ist zu kompliziert. Aber trotzdem danke für den Vorschlag.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

ZEVS

BeitragFr, Apr 13, 2012 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Prinzip der Orthogonalität besagt, dass es keinen Unterschied macht, ob du das ganze in eine Funktion packst oder gleich ausführst. Es sind z.B. auch solche Vergleiche möglich:
BlitzMax: [AUSKLAPPEN]
If obj <> Null And obj.whatever = ... Then ...

In diesem Fall kann obj auch Null sein und es kommt kein Fehler.

ZEVS

Der Eisvogel

BeitragFr, Apr 13, 2012 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber wenn ich jetzt in der einen Funktion z.B.: feststelle, dass mein Objekt etwas bestitzt (ebenfalls durch eine komplizierte Abfrage, WinAPI sei dank!), dann verändert sich das Verhalten anderer Abfragen, dass heißt, jede Abfrage, die ich in eine Funktion packe, muss irgendwie mit diesem einen Wert versorgt werden. Das ist bei einem Wert eventuell noch übersichtlich gestaltbar, aber bei mehrere solcher Werte wird da dann unübersichtlich.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group