![]() |
probleme mit For-Schleife
hallo zusammen,
ich habe hier ein ganz merkwürdiges Problem mit der Forschleife:
Delphi-Quellcode:
Bei der Ausgabe nach der Schleife kommt immer 4 heraus. Warum :wiejetzt:
for index:=0 to 3 do
begin showmessage('hallo welt'); end; showmessage(IntToStr(index)); Was mache ich falsch? :?: Das habe ich noch nie gehabt. Kennt jemand das Problem? :?: Habe ich was verstellt? :?: Oder ist es einfach nur schon zu spät :gruebel: |
Re: probleme mit For-Schleife
nimm statt index lieber einen anderen Namen
für deine Variable, z.B. 'f' oder 'i'. Vile Komponennten haben eine Eigenschaft die index heist, da kanns dann schon mal zu Problemchen kommen.... |
Re: probleme mit For-Schleife
Hi zu später Programmiererstunde,
ohne das überprüft zu haben denke ich dass Delphi ein for schleife so umsetzt:
Code:
bei der obigen while Schleife wäre i nach Beendigung derselben 4
i:=0;
while i <= 3 do i:=i+1 analog zu for i=0 to 3 do Weiss nicht genau ob das so ist, aber eben meine Vermutung. Aber ist das für dich wichtig ? Ich meine ist das Ergebnis nach der SChleife wichtig ? |
Re: probleme mit For-Schleife
hmmm, ne daran liegt es nicht. Sind vielleicht irgendwelche Einstellungen verstellt? Anders kann ich mir das nicht erklären.
|
Re: probleme mit For-Schleife
also meines Wissens nach, wird die
Zählvariable erst nach durchlauf der Schleife erhöht. Aber gib dch einfach mal deine Variable in der Schleife aus.... |
Re: probleme mit For-Schleife
Hast Du die Warnung in deinen Compileroptionen ausgeschaltet? Bei mir kommt nämlich dies:
Zitat:
Gruß Wormid |
Re: probleme mit For-Schleife
Gott sei dank. Ich dachte schon, keiner würde die Warnungen lesen. :roll:
|
Re: probleme mit For-Schleife
in der Schleife stimmt noch alles. Normalerweise benutze ich auch immer einen Counter innerhalb der Schleife, um dann damit weiterzuarbeiten, aber ich war mir fast sicher, dass auch schon mal so gemacht zu haben. Naja muss wohl ne Täuschung gewesen sein, denn das Argument mit der Realisierung durch die Whileschleife ist ja vollkommen einleuchtend und kommt mir auch bekannt vor :oops:
ich schiebs mal auf die späte Stunde :wink: Aber danke für die schnelle Hilfe |
Re: probleme mit For-Schleife
Kann man dann eigentlich (also nur mal theoretisch)
irgend eine lokale Variable fpür die for-Schleife benutzen und danach mit dem alten Wert weiterarbeiten ? |
Re: probleme mit For-Schleife
Zitat:
|
Re: probleme mit For-Schleife
Zitat:
beieiner for-Schleife müsstest du wissen, wie oft sie durchlaufen wird. |
Re: probleme mit For-Schleife
@Mrkonogge
Ja sicherlich, der Zähler wird erst am Ende einer Schleife erhöht - mein Code war ungenau: besser:
Code:
while i<=3 do
begin bla bla i:=i+1; end; |
Re: probleme mit For-Schleife
Hängt euch nicht so dolle an dem while-Konstrukt auf... Schenkt mal der Compiler-Warnung ein bissel mehr Beachtung! :wink:
Zitat:
:hi: |
Re: probleme mit For-Schleife
war nur son komischer Gedankengang :-D
Ach und übrigens, die Variable war nicht meine.... |
Re: probleme mit For-Schleife
wer zählen kann ist klar im vorteil:
0, 1, 2, 3 => ergibt 4 ausgaben setze index auf 1 |
Re: probleme mit For-Schleife
Zitat:
|
Re: probleme mit For-Schleife
nö
tipp mal folgendes ein, hab nur ein leeres formualt und ein label
Delphi-Quellcode:
ausgabe => '0123'
procedure TForm1.FormCreate(Sender: TObject);
var i: integer; begin label1.caption := ''; for i:=0 to 3 do label1.caption := label1.caption + IntToStr(i); end; ich zähle immer noch 4 ziffern ;) |
Re: probleme mit For-Schleife
Zitat:
|
Re: probleme mit For-Schleife
leutz,
lest ihr überhaupt was einige schon geschrieben haben? guckt euch doch mal die Compilermeldung an Zitat:
wenn nicht...die zählvariable ist NUR innerhalb der schleife gültig ausserhalb ist sie nicht definiert...auch wenn es jetzt einen anderen wert habne sollte...dieser Wert ist null und nichtig Gruß Tyrael |
Re: probleme mit For-Schleife
Zitat:
|
Re: probleme mit For-Schleife
![]() kann ja mal passieren, damit man so nen denkfehler drin hat.. passiert jeden auf kurz oder lang... |
Re: probleme mit For-Schleife
Zitat:
Wie auch immer. Tyrael hat Recht. Das ursprüngliche Problem ist schon lange gelöst. Wenn du den letzten Wert der Schleifenvariable nach Ende der Schleife noch benötigst, musst du ihn innerhalb der Schleife einer weiteren Variable zuweisen, da die Schleifenvariable selbst nach Schleifenende nicht mehr definiert ist. |
Re: probleme mit For-Schleife
Zitat:
Zitat:
wenn i am anfang = 1 (for i:=1 to 4) ist dann ist die zahl der ausführungen = 4 und die Variable (Durchlaufzähler) hat im letzten durchlauf den wert 4 Die Zahl der Ausführungen ist nur dann gleich mit dem Wert des Durchlaufzählers wenn i am anfang = 1 ist! edit: da war wohl jemand schneller ;) |
Re: probleme mit For-Schleife
Zitat:
ist es aber nicht, schluss ende aus, oder definier dir ne neue Sprache DelphiNew oder so Ergänzung: mal ein Beispiel für wäre: Wäre Zahl/0 definiert als 0, so wären viele mathematische Probleme ganz anders ist es aber nicht es ist nicht definiert Gruß |
Re: probleme mit For-Schleife
Zitat:
Zitat:
[Tyraelärgeredit] Zitat:
[/Tyraelärgeredit] P.S.: Auf die Frage brauchst du nicht zu antworten :zwinker: |
Re: probleme mit For-Schleife
Zitat:
|
Re: probleme mit For-Schleife
Das kommt davon, wie Delphi die Schleife im Maschinencode umsetzt:
Code:
Das hat das Resultat, dass die Schleifenvari am Schluß Endwert+1 ist.
MOV CX,0 ;Startwert
schleife: NOP ;hier stehen die Befehle in der Schleife INC CX CMP CX,4 ;Schleifenvari mit Endwert vergleichen JNE schleife ;solange ungleich einen weiteren Durchlauf beginnen |
Re: probleme mit For-Schleife
hey,
nochmal danke an die leute, die mich zum thema zahl der durchläufe und durchlaufzähler aufgeklärt haben ! :-D :thuimb: |
Re: probleme mit For-Schleife
dann haben wir ja alle was gelernt :mrgreen:
|
Re: probleme mit For-Schleife
Bei der FOR-schleife wird der Wert bei "end" automatisch um 1 erhöht, dann wird überprüft, ob die schleife zu Ende ist (Spreich index > 3) und erst dann abgebrochen.
Deswegen hast du nach der Schleife index=4. Mach einfach gleich nach der Schleife index := index - 1; So kriegst du deine 3 zu fassen. :lol: :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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