Seite 1 von 2
Welche Schleife nehm ich da?
Verfasst: 11.04.2008 23:51
von Scarabol
Hi Leute,
ich hab folgende Struktur in meinem Programm, wie ihr seht arbeitet diese mit GOTO, aber da GOTO "unsauberer" Code ist würde ich das gerne durch eine Schleife ersetzen nur welche?
Code: Alles auswählen
jump1:
length = MyFunction()
If length = 1000
... <- hier steht Code -> ...
Goto jump1
ElseIf length
... <- hier steht auch Code -> ...
EndIf
Gruß
Scarabol
Verfasst: 11.04.2008 23:56
von edel
Code: Alles auswählen
Repeat
len = MyFunc()
If len = 1000
... <- hier steht Code -> ...
Else
... <- hier steht auch Code -> ...
Break;
EndIf
ForEver
Verfasst: 12.04.2008 00:00
von Kurzer
Das sieht in der Tat recht krank aus...
Hoffe diese Version geht, habs nicht probiert:
Code: Alles auswählen
Repeat
length = MyFunction()
If length = 1000
... <- hier steht Code -> ...
ElseIf length ; Wat soll das sein?
... <- hier steht auch Code -> ...
EndIf
Until length <> 1000
edit: Edel war schneller
Verfasst: 12.04.2008 11:38
von NicknameFJ
In Scarabols Code wird der zweite Codeabschnitt ( ... <- hier steht auch Code -> ... ) nur dann ausgeführt wenn length nicht den Wert 0 hat. Dies wird bei Edel nicht korrekt berücksichtigt
Müsste dann so aussehen:
Code: Alles auswählen
Repeat
len = MyFunc()
If len = 1000
... <- hier steht Code -> ...
Elseif len
... <- hier steht auch Code -> ...
Break;
else
... <- hier wird kein Code mehr ausgeführt " -> ...
Break;
EndIf
ForEver
@Kurzer
Kurzer hat geschrieben:
ElseIf length ; Wat soll das sein?
Dieser elseif Zweig wird nur dann ausgeführt, wenn length #true ist, d.h. einen Wert <> 0 hat
Ich hoffe ich habe mich jetzt hier auf die Schnelle nicht irgendwo vertan
Verfasst: 12.04.2008 13:56
von Kurzer
NicknameFJ hat geschrieben:
Kurzer hat geschrieben:
ElseIf length ; Wat soll das sein?
Dieser elseif Zweig wird nur dann ausgeführt, wenn length #true ist, d.h. einen Wert <> 0 hat
Ich hoffe ich habe mich jetzt hier auf die Schnelle nicht irgendwo vertan
Ob das von Scarabol auch so gedacht war? Ich kann's mir nicht vorstellen. Einmal auf einen numerischen Wert prüfen, dann auf einen bool'schen Wert.

Ist noch kranker als ein Gosub/Goto zu verwenden.

Verfasst: 12.04.2008 14:02
von NicknameFJ
@Kurzer:
In PB gibt es keine richtigen Bool´sche Variablentypen.
Als #TRUE wird hier alles interpretiert was nicht 0 ist und #FALSE ist dann 0
Daher funktionieren solche Konstrukte wie
korrekt.
Diese verkürzte Form benutzen übrigens in PB viele Programmierer - ist nicht krank.
ist die Kurzform für
Verfasst: 12.04.2008 14:49
von Scarabol
Wir sind alle krank
@Kurzer
Ob dus glaubst oder nicht aber es wahr wirklich Absicht...
Gruß
Scarabol
Verfasst: 12.04.2008 14:59
von ts-soft
Also so?
Code: Alles auswählen
Repeat
len = MyFunc()
If len
If len = 1000
;... <- hier steht Code -> ...
Else
;... <- hier steht auch Code -> ...
Break;
EndIf
Else
;... <- hier steht auch Code -> ...
EndIf
ForEver
Verfasst: 12.04.2008 17:08
von Falko
oder so?
Code: Alles auswählen
Repeat
length=MyFuntion()
.... <- hier steht Code -> ...
Until length <> 1000
If length
.... <- hier steht auch Code -> ...
EndIf
Gruß Falko
Verfasst: 12.04.2008 17:24
von NicknameFJ
@TS-Soft:
Deine Variante bricht die Schleife auch nicht ab, wenn der Rückgabewert der Procedure 0 war !