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. :freak: Ist noch kranker als ein Gosub/Goto zu verwenden. :wink:

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

Code: Alles auswählen

if Testvariable
   DoIrgendwas
endif
korrekt.


Diese verkürzte Form benutzen übrigens in PB viele Programmierer - ist nicht krank.

Code: Alles auswählen

if Testvariable$
   DoIrgendwas
endif
ist die Kurzform für

Code: Alles auswählen

if Testvariable$ <> ""
   DoIrgendwas
endif

Verfasst: 12.04.2008 14:49
von Scarabol
Wir sind alle krank :D

@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 !