![]() |
Delphi-Version: 6
Delphi for Schleife -> Warnung
Hallo, weil ich meine liste in Segmenten durchlaufen muss, weise ich der Indexvariable den Startwert außerhalb, um überhaupt den Code kompelieren zu können musste ich die Variable sich selbst zuweisen :roll:
Code:
Der Code macht das, was es machen soll, allerdings kommt eine Warnung
t := 0;
j := 100; for t := t to j do begin //iwas... end;
Code:
Wie sieht denn die richtige Schreibweise für so eine for-Schleife bzw. gibt es sie überhaupt? Bei C++ soll man ja das t da einfach weglassen aber das führt bei Delphi zu einer Fehlermeldung beim kompilieren
[Warnung] frmAnalysis.pas(1039): FOR-Schleifenvariable 't' kann nach Durchlauf undefiniert sein
Code:
t=0;
for(; t<=100; ++t) |
AW: Delphi for Schleife -> Warnung
Also wenn ich sowas mache, nutze ich immer eine 2. Variable. Hab deine Variante ehrlich gesagt noch nie ausprobiert.
Delphi-Quellcode:
start := 100;
for i:= start to ende do begin end; |
AW: Delphi for Schleife -> Warnung
Zitat:
|
AW: Delphi for Schleife -> Warnung
Zitat:
Zitat:
|
AW: Delphi for Schleife -> Warnung
Dein Problem ist nicht die For-Schleife, sondern dass du danach auf die Zählervariable zugreifst und das ist nicht erlaubt wenn man die Schleife nicht aktiv verlassen hat (z.B. mit
Delphi-Quellcode:
).
break
Beispiel:
Delphi-Quellcode:
Ergibt:
procedure p();
var x, y: Integer; begin x := 0; y := 5; for x := x to y do WriteLn(x); WriteLn('Last value: ', x); end;
Code:
x ist nach der Schleife 6 obwohl du gar nicht bis 6 gezählt hast. Davor warnt dich der Compiler und er hat Recht. Wenn du x nach der Schleife nochmal verwenden willst solltest du dir den letzten Wert entweder in einer zusätzlichen Variable merken oder die Schleife aktiv verlassen.
0
1 2 3 4 5 Last value: 6 Beispiel:
Delphi-Quellcode:
procedure p();
var x, y: Integer; begin x := 0; y := 5; for x := x to y do begin WriteLn(x); if(x = y) then Break; end; WriteLn('Last value: ', x); end; |
AW: Delphi for Schleife -> Warnung
Zitat:
Man kann die Schleifenvariable danach aber auch problemlos weiter benutzen, wenn man sie vorher eben initialisiert.
Delphi-Quellcode:
X := 123;
if X = ...; for X in 0 do 3000 do begin ... end; X := 789; if X = ...; |
AW: Delphi for Schleife -> Warnung
Dann ist es aber keine Schleifenvariable mehr, sondern eine recyclete Variable mit irgendwas. Ich denke es ging ihm darum den Wert des letzten Durchlaufs zu behalten.
|
AW: Delphi for Schleife -> Warnung
Es ging ihm einfach darum wie man es richtig/ordentlich macht ohne eine Warnung zu bekommen.
|
AW: Delphi for Schleife -> Warnung
Ich würde es wegen der besseren Lesbarkeit so machen. Das gibt auch keine Compiler-Warnung.
Delphi-Quellcode:
var
j: Integer; begin j := 0; repeat if j = N then // falls man eine Kondition braucht Break; // ... Inc(j); until j = 100; end; |
AW: Delphi for Schleife -> Warnung
Oder eine while - Schleife benutzen, wenn man volle Kontrolle über die Schleifenvariable haben will:
Delphi-Quellcode:
Dabei nur das inc nicht vergessen. Das ist gerne mein Standardfehler, und dann wundere ich mich über die Endlosschleife.:)
t := 0;
j := 100; while t <= j do begin //iwas... inc(t); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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