![]() |
Zuweisung für FOR-Schleifenvariablen wird nicht akzeptiert
Hallo,
der Fehler wird gemeldet: Zitat:
Delphi-Quellcode:
Wieso hat der damit ein Problem dass ich den Schleifenvariablen etwas zuweisen will? Wage glaube ich dass das früher immer geklappt hat?
for la:=0 to max.a do
for lb:=-max.b to max.b do for lc:=-max.c to max.c do begin //jetzt kommt viel blabla //aussenwelt if (maxlauf>5000)or (i mod 10=0 ) then // keine Sorge der kommt da manchmal rein begin application.ProcessMessages; if stop then begin la:=max.a; lb:=max.b; lc:=max.c; end; label2.Caption:=inttostr(maxformel-i); end; //jetzt kommt viel blabla end; Rot makieren tut er das da:
Delphi-Quellcode:
la:=max.a;
|
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
versuchs doch einfach mit "break", du willst ja wie ich das sehe "nur" die Schleifen beenden oder?
|
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
Hai Alexander,
den Laufvariablen einer FOR-Schleife kannst Du nichts zuweisen. Diese werden quasi vom Compiler "wegoptimiert". Genauso kannst Du nach der FOR-Schleife nicht auf die Variablen zugreifen. Genauer gesagt haben sie nach der Schleife keinen definierten Wert. Das war aber imho schon immer so. |
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
kann es sein, das es ein Problem damit hat,
dass Du die Schleifenvariablen der FOR Schleife in der Schleife veränderst. Da wäre dann wenn ein while oder repeat Schleife besser.
Delphi-Quellcode:
so ähnlich stelle ich mir das vor.
la:=0;
while la < max.a do begin lb:=-max.b; while lb < max.b do begin lc:=-max.c; while lc < max.c do begin //jetzt kommt viel blabla //aussenwelt if (maxlauf>5000)or (i mod 10=0 ) then // keine Sorge der kommt da manchmal rein begin application.ProcessMessages; if stop then begin la:=max.a; lb:=max.b; lc:=max.c; end; label2.Caption:=inttostr(maxformel-i); end; inc(lc); end; /while lc inc(lb); end; //while lb inc(la); end; // while la //jetzt kommt viel blabla Ich mag das mit break nicht. Grüße Klaus |
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
Zitat:
Hatte es nämlich damit ausprobiert. Zitat:
Dann bleibt mir wohl nichts anderes übrig als in jede for schleife die break variante einzubauen. Also ungefähr so
Delphi-Quellcode:
Falls ich was falsch eingerückt haben sollte. Bitte entschuldigt. Hier ist es mit den Leerzeichen kompliziert einzurücken.
for la:=0 to max.a do
begin for lb:=-max.b to max.b do begin for lc:=-max.c to max.c do begin //jetzt kommt viel blabla //aussenwelt if (maxlauf>5000)or (i mod 10=0 ) then // keine Sorge der kommt da manchmal rein begin application.ProcessMessages; if stop then break; label2.Caption:=inttostr(maxformel-i); end; //jetzt kommt viel blabla end; if stop then break; end; if stop then break; end; |
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
Also wenn nach der Schleife nixmehr kommt würd ich ein exit empfehlen.
|
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
Da kommt noch verdammt viel wichtiges. :???:
Deswegen so umständlich. :roll: |
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
Es gibt mehrere Möglichkeiten die Schleife zu verlassen.
Hier nur ein paar Möglichkeiten... Abfrage in jeder Schleife:
Delphi-Quellcode:
Label um alle Schleifen direkt zu verlassen (manche mögen kein 'goto'):
begin
for LoopX := 1 to 1000 do begin for LoopY := 1 to 1000 do begin for LoopZ := 1 to 1000 do begin Application.ProcessMessages(); if Stop then Break; //... end; if Stop then Break; //... end; if Stop then Break; //... end; //... end;
Delphi-Quellcode:
Mit Exit die Funktion verlassen (Code nach 'finally' wird nicht ausgeführt):
label
LoopEnd; begin for LoopX := 1 to 1000 do begin for LoopY := 1 to 1000 do begin for LoopZ := 1 to 1000 do begin Application.ProcessMessages(); if Stop then goto LoopEnd; //... end; //... end; //... end; LoopEnd: //... end;
Delphi-Quellcode:
...hat alles seine Vor- und Nachteile.
begin
try for LoopX := 1 to 1000 do begin for LoopY := 1 to 1000 do begin for LoopZ := 1 to 1000 do begin Application.ProcessMessages(); if Stop then Exit; //... end; //... end; //... end; finally //... end; end; |
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
dann mach doch ne Funktion/prozedur aus dem Abschnitt! So etwa:
Delphi-Quellcode:
Naja weist schon was ich mein oder?procedure DeineMainPrc; procedure InMainproc(var x,y,a,z,b,c : integer); begin for i:= x to y do for j:= a to z do for k := b to c do begin if stop then exit; end; end; begin InMainProc(x1,x2,x3,x4,x5,x6) end; |
Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie
Exit zählt i.A. zu den Jump-Befehlen und wird oft in die Kategorie "GoTo" geworfen. Und da gehört es auch hin, es ist einer der Befehle, die zu unleserlichem Spaghetti-Code führen und nur mit Bedacht, besser aber nie, genutzt werden sollten.
Das dreifache Break, wie von NicoDE gezeigt, ist hier der sauberste Lösungsweg. ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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