wenn du bei einer bestimmten Bedingung die Schleife wieder von ganz vorn beginnen lassen wölltest müsstest du die Zählvariable ja zurücksetzen
Delphi-Quellcode:
var LCount: Integer;
LBreakCount: Integer;
begin
LBreakCount := 0;
for LCount := 1 to 5 do
begin
ListBox1.Items.Add(IntToStr(LCount));
if (LCount = 5) and (LBreakCount < 1) then
begin
LCount := 0; //auf 0 und nicht 1 weil am Ende der schleife LCount erhöht wird
inc(LBreakCount);
end;
end;
Dabei wird aber der Compiler meckern weil es nicht erlaubt ist innerhalb einer schleife die Zählvariable zu verändern.
Aber es gibt doch eine Möglichkeit diese Zählvariable zu verändern.
Ab hier sollten nur die jenigen weiterlesen die genau wissen was sie tun und sich des Risikos bewusst sind. (schließlich hat es gründe das der Compiler das nicht zulassen will)
Und zwar holen wir uns dazu einfach die Adresse der Zählvariablen und schreiben an diese Stelle im Speicher den gewünschten Wert. Somit ist es keine direkte Zuweisung auf die Zählvariable da wir ja eigentlich irgendwo im Speicher schreiben (und "zufällig" ist es eben die Adresse der Zählvariablen)
Delphi-Quellcode:
var LCount: Integer;
LBreakCount: Integer;
begin
LBreakCount := 0;
for LCount := 1 to 5 do
begin
ListBox1.Items.Add(IntToStr(LCount));
if (LCount = 5) and (LBreakCount < 1) then
begin
PInteger(@LCount)^ := 0; //auf 0 und nicht 1 weil am Ende der schleife LCount erhöht wird
inc(LBreakCount);
end;
end;