Linked List - Ausnahmen in der Syntax? (gelöst)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBaser
Beiträge: 180
Registriert: 08.09.2004 21:20
Wohnort: Berlin
Kontaktdaten:

Linked List - Ausnahmen in der Syntax? (gelöst)

Beitrag von PureBaser »

Hi @all!

Folgender Code funktioniert:

Code: Alles auswählen

ResetList(Namenliste())
NextElement(Namenliste())
Repeat
  PrintN(Namenliste()) ;gibt immer das nächste Element an
Until NextElement(Namenliste()) = 0
Normalerweise dürfte NextElement() nicht automatisch erfolgen, da es in der Schleife nicht aufgerufen wird. Ich hätte hier eher eine Endlos-Schleife erwartet.

Gegenbeispiel:

Code: Alles auswählen

ResetList(Namenliste())
NextElement(Namenliste())
  PrintN(Namenliste())
  PrintN(Namenliste())
  PrintN(Namenliste())
  PrintN(Namenliste())
Hier bleibt das Element hingegen wie erwartet beständig bleibt.

Ist das jetzt ein Ausnahmefall oder gibts ne logische Erklärung?
Zuletzt geändert von PureBaser am 19.05.2006 21:48, insgesamt 1-mal geändert.
PB4 & WinXP_SP2
Exabot
Beiträge: 63
Registriert: 10.12.2004 09:50

Beitrag von Exabot »

Hilfe hat geschrieben: Beispiel:

a=0
Repeat
a=a+1
Until a>100

Diese Schleife wird solange ausgeführt, bis "a" einen Wert > 100 ergibt. (Die Schleife wird 101 mal durchlaufen).
Warum sollte NextElement also nicht ausgeführt werden?

Gruß
Spider
Benutzeravatar
PureBaser
Beiträge: 180
Registriert: 08.09.2004 21:20
Wohnort: Berlin
Kontaktdaten:

Beitrag von PureBaser »

Ganz einfach:

Weil NextElement() außerhalb der Schleife steht. Die Bedingung sollte eigentlich daher nie erfüllt werden.
PB4 & WinXP_SP2
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 »

NextElement befindet sich nicht ausserhalb der Schleife, sondern befindet sich im Fuß als Bedingung.
While NextElement()
wäre aber sinnvoller in diesem Fall, die Bedingung im Kopf zu testen

Code: Alles auswählen

ResetList(Namenliste())
While NextElement(Namenliste())
  PrintN(Namenliste()) ;gibt immer das nächste Element an
Wend
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
Exabot
Beiträge: 63
Registriert: 10.12.2004 09:50

Beitrag von Exabot »

Wenn Du recht haben würdest, dann würde in dem Beispiel der Hilfe
a>100 niemals getestet, ergo würde eine Repeat .. Until Schleife niemals enden, es wäre also absolut sinnlos eine Endebedingung anzugeben.

In Deinem Beispiel wird "NextElement() = 0" als Endebdingung verwendet,
da NextElement eine Function ist muss diese Ausgeführt werden um einen Rückgabewert zu erhalten, der gegen 0 geprüft werden kann.

mfg

Spider
Benutzeravatar
PureBaser
Beiträge: 180
Registriert: 08.09.2004 21:20
Wohnort: Berlin
Kontaktdaten:

Beitrag von PureBaser »

Ahja, Erklärung ist Top! Nice weekend!
PB4 & WinXP_SP2
Antworten