![]() |
AW: For in For dann Goto
Himtisu macht die Verwirrung wieder komplett :lol:
|
AW: For in For dann Goto
Und ich hoffe, das führt dazu, dass von GOTO Abstand genommen wird. :roll:
|
AW: For in For dann Goto
Vor allen Dingen und zuerst sollte davon Abstand genommen werden, Schleifenvariablen außerhalb der Schleife benutzen zu wollen.
GOTO ist nicht böse, aber die Sache mit den Schleifenvariablen schon! GOTO ist nur häßlich. |
AW: For in For dann Goto
Delphi-Quellcode:
oder ohne goto
procedure...
label ForEnd; begin a:=0; b:=0; for a := 0 to 10 do begin for b := 0 to 20 do begin if prüfungsachen u.a. mit 'a' und 'b' then Goto ForEnd; end; end; ForEnd: ... variable a und b für die weitere Verarbeitung end;
Delphi-Quellcode:
sollte funktionieren.
procedure...
begin a:=0; b:=0; for a := 0 to 10 do begin for b := 0 to 20 do begin if prüfungsachen u.a. mit 'a' und 'b' then break; end; end; ... variable a und b für die weitere Verarbeitung end; |
AW: For in For dann Goto
Oder mit einem else-Zweig
|
AW: For in For dann Goto
@vergessen: Break und Continue funktionieren nur durch eine Schleifenebene hindurch ... hier sind es aber 2 Ebenen.
Wenn, dann müßte jeweils ein Break pro Schleife rein
Delphi-Quellcode:
Wie gesagt, While/Repeat-Schleifen wären die einzig wirklich praktikable Lösung, vorallem da nach diesen die (Schleifen)-Variablen noch verfügbar wären. (es sind dann ja keine "echten" Schleifenvariablen mehr :angle2: )
for a := 0 to 10 do
begin for b := 0 to 20 do begin ... if ... then Break; end; if ... then Break; end; Wenn man es schlau anstellt, dann kann man diese beiden einfachen Schleifen auch auf eine Schleife runterschrumpfen und schon geht Break wieder voll durch. :mrgreen: wie wäre es so?
Delphi-Quellcode:
a := -1;
repeat Inc(a); b := -1; repeat Inc(b); ... Abbrechen := not {prüfungsachen u.a. mit 'a' und 'b'}; until Abbrechen or (b >= 20); until Abbrechen or (a >= 10); ... ShowMessage(Format('a = %d und b = %d', [a, b])); // oder a := -1; repeat Inc(a); b := -1; repeat Inc(b); Abbrechen := not {prüfungsachen u.a. mit 'a' und 'b'}; if Abbrechen then Break; ... until Abbrechen or (b >= 20); until Abbrechen or (a >= 10); ... ShowMessage(Format('a = %d und b = %d', [a, b])); |
AW: For in For dann Goto
@himitsu, schon klar, aber dem TE geht es wohl um
zitat Delphi gibt hier Warnungen aus: For Schleifenvariable 'a' kann nach Durchlauf undefiniert sein For Schleifenvariable 'b' kann nach Durchlauf undefiniert sein dachte ich. Daher sollte ein
Delphi-Quellcode:
vor den Schleifen reichen.
a:=0;
b:=0; |
AW: For in For dann Goto
Der Zugriff auf for-Schleifenvariablen nach Verlassen der Schleife ist in erster Linie deshalb unzulässig, weil der Compiler bei eingeschalteter Optimierung so etwas daraus macht:
Delphi-Quellcode:
for a := 10 downto 0 do
begin for b := 20 downto 0 do begin if prüfungsachen u.a. mit '10 - a' und '20 - b' then break; end; end; |
AW: For in For dann Goto
Warum sollte es reichen?
Diese Variableninhalte sind nach der Schleife undeffiniert. Davor Zu Beginn wird es von Delphi automatisch initialisiert. (nämlich mit dem Wert nach dem
Delphi-Quellcode:
des For-To/Downto-Do)
:=
Und wie grade erwähnt, optimiert der Compiler deine Zuweisungen eh weg. |
AW: For in For dann Goto
Die Schleifenvariable kann undefiniert sein.
Dann nimm ein Repeat Until oder ein While und Du hast eine Schleife und Deine Variable ist definiert. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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