Welche Schleife nehm ich da?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Beitrag 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]
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag 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?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Antworten