Seite 2 von 2

Verfasst: 12.04.2008 17:48
von ts-soft
NicknameFJ hat geschrieben:@TS-Soft:

Deine Variante bricht die Schleife auch nicht ab, wenn der Rückgabewert der Procedure 0 war !
Kommt auf den Code drauf an, wenn der z.B. Break enthält :mrgreen:

Verfasst: 12.04.2008 17:54
von NicknameFJ
@ TS-Soft:

Ja, ja - da fehlen einem die Worte :shock: - ist nicht böse gemeint :lol:

Wollte nur darauf aufmerksam machen, auch dass Scarabol hier nicht in eine Falle tappt.

[EDIT]
oder wenn der Code

Code: Alles auswählen

! UD2
enthält, dann wird "die Schleife" auch abgebrochen - :lol: :lol: :lol: :mrgreen:

[/EDIT]

Verfasst: 12.04.2008 19:14
von Kurzer
NicknameFJ hat geschrieben:@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...
Jo, daß das funktioniert wusste ich, aber es liest sich halt ziemlich ungeschmeidig und ist nicht sofort jedem klar.

Ein ElseIf length <> 0 würde da mehr Klarheit schaffen.

Mich würde mal der reale Hintergrund hinter der Schleife ind die Abfragen interessieren.
- wenn Wert gleich 1000 tue was und bleib in der Schleife
- wenn Wert gleich 0, aber nicht 1000, tue was und verlasse die Schleife
- wenn Wert ungleich 1000 und nicht 0 tue nichts und verlasse die Schleife
Wo braucht man das?

Verfasst: 12.04.2008 20:39
von Scarabol
Hier:

Code: Alles auswählen

            jump2:
            buffer = AllocateMemory(1000)
            len = ReceiveNetworkData(conid, buffer, 1000)
            If len = 1000
              If cont
                cont = ReAllocateMemory(cont, MemorySize(cont)+len)
                c+len
              Else
                cont = AllocateMemory(len)
                c = 0
              EndIf
              CopyMemory(buffer, cont+c, len)
              FreeMemory(buffer)
              Goto jump2
            Else
              If l = 0
                l = PeekL(buffer)
              Else
                If PeekS(buffer) = "end"
                  FreeMemory(buffer)
                  Break
                EndIf
                Debug PeekS(buffer, l)
                Debug PeekS(buffer+l)
                End
                If cont
                  cont = ReAllocateMemory(cont, MemorySize(cont)+l)
                  c+l
                Else
                  cont = AllocateMemory(l)
                EndIf
                CopyMemory(buffer, cont, l)
                If PeekS(buffer+l) = "end"
                  FreeMemory(buffer)
                  Break
                EndIf
                FreeMemory(buffer)
              EndIf
            EndIf
Zum empfangen von NetzwerkDaten

Gruß
Scarabol

Verfasst: 12.04.2008 21:15
von NicknameFJ
@Scarabol

Ich habe mir Deinen ausführlichen Code oben mal angesehen. Diese Konstrukt stimmt aber nicht mit Deinem aller ersten Posting überein. D.h. Du mußt die Schleifenabbrüche nochmal anpassen.

Im ersten Code hast Du sinngemäß


if length = 1000
Dowas
goto ...
elseif length
DoWas
endif


wohingegen Du im zweiten Code

if length = 1000
Dowas
goto ...
else
Dowas
endif


stehen hast. Das sind zwei unterschiedliche Abbruchkriterien

Grüße

Joachim


PS: Habe absichtlich keine Code-Tags gesetzt, da sonst Fettschrift nicht funzt

Verfasst: 12.04.2008 21:44
von Scarabol
Der Code oben funktioniert so auch nicht :)

Hab den so hundert mal angepasst, aber bei dem Netzwerk ZufallsSpiel immer verloren :(

Jetzt fang ich gerad hier nochmal an:
http://www.purebasic.fr/german/viewtopi ... highlight=

Gruß
Scarabol