![]() |
Frage zu for Schleifen
Hallo,
ich habe eine Frage bezüglich FOR-Schleifen: Gibt es eine Möglichkeit FOR-Schleifen forzeituig zu unterbrechen und neu anzufangen. Ich habe in einer FOR-Schleife ein Paar If-Anweisungen und wenn die erste erfüllt wird, dürchläuft die Schleife die anderen If-Anweisungen auch, das ist ja Blödsinn :roteyes: ! kabuco |
Re: Frage zu for Schleifen
:gruebel:
hast du sowas?
Delphi-Quellcode:
Willst du jetzt die Schleife wieder bei 1 beginnen, wenn eine Bedingung zutrifft, oder willst du einfach zum naechsten Schleifenschritt springen?
for i := 1 to 5 do
begin if (a) then do_a(); if (b) then do_b(); end; Evtl. solltest du dir mal ![]() ![]() Greetz alcaeus |
Re: Frage zu for Schleifen
Willst du die Schleife abbrechen oder nur den einen Durchlauf? Wenn 1. dann
Delphi-Quellcode:
wen 2.) dann einfach
break();
Delphi-Quellcode:
oder case-Anweisung verwenden.
else if
alcaeus war schneller |
Re: Frage zu for Schleifen
Danke für die Schnellen Antworten erst mal!
Ich möchte, wie alcaeus gesagt hat, zum nächsten Schleifenschritt springen. Gibt es da eine Funktion, den meiner Meinung nach brechen break und exit die Prozedur ab. Kabuco [edit]Upps, habe mir gerade den Hilfetext zu 'continue' angesehen, und da ist, was ich suchte! Danke für die Antworten[/edit] |
Re: Frage zu for Schleifen
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:
Dabei wird aber der Compiler meckern weil es nicht erlaubt ist innerhalb einer schleife die Zählvariable zu verändern.
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; 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; |
Re: Frage zu for Schleifen
also es gibt noch "Continue" das müsste das sein was du suchst
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz