Zählvariable ändert ihren Wert

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 994
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Zählvariable ändert ihren Wert

Beitrag von kralle »

Moin,

heute scheint echt nicht mein Tag zu sein.
laz_schleife.png
laz_schleife.png (24.86 KiB) 5080 mal betrachtet
Wenn das erste Mal die Zeile "durchlauf:= 0;" durchlaufen wird, ist Wert "0".
Auch ist iMax nach dem ersten Durchlauf 7.
Jetzt wird das erste Mal die Zuweisung der "StringGrid.Cell" durchlaufen und plötzlich ist "durchlauf = 6" und die Schleife wird nach einem Durchlauf beendet.
Ich habe das im Debug-Modus mittels F7 durchlaufen lassen und komme nicht dahinter, warum "durchlauf" plötzlich 6 ist.
Ich hat auch schon andere Variablen-Namen probiert, damit der Wert nicht aus einer anderen Routine beeinflusst wird.
Auch in dem Memo finden sich nicht die Zahlen 1-6, sondern nur die 6. Auch wird nur einem Eintrag das '###' angehängt.
Was passiert hier?

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

shokwave
Beiträge: 471
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Zählvariable ändert ihren Wert

Beitrag von shokwave »

Das Semikolon hinter dem do sieht aber nicht gewollt aus...
mfg Ingo

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Zählvariable ändert ihren Wert

Beitrag von fliegermichl »

Ja, der Zählerstand nach einer For Schleife ist laut Definition undefiniert.
Durch das Semikolon hinter do ist die (Leer) Schleife beendet, bevor der begin Block startet.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 994
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Zählvariable ändert ihren Wert

Beitrag von kralle »

Ich werde rot und stelle mich in de Ecke zum Schämen ...
shokwave hat geschrieben:
So 18. Feb 2024, 17:37
Das Semikolon hinter dem do sieht aber nicht gewollt aus...
Danke.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 994
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Zählvariable ändert ihren Wert

Beitrag von kralle »

Moin,

Ingo war schneller .... :oops:

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

martin_frb
Beiträge: 573
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Zählvariable ändert ihren Wert

Beitrag von martin_frb »

Und daher sieht das bei mir auch direkt im Editor nach Fehler aus.
emptyloop.png
emptyloop.png (58.51 KiB) 5041 mal betrachtet
Mehr: https://wiki.freepascal.org/New_IDE_fea ... t.2Fmarkup

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Zählvariable ändert ihren Wert

Beitrag von fliegermichl »

martin_frb hat geschrieben:
So 18. Feb 2024, 21:15
Und daher sieht das bei mir auch direkt im Editor nach Fehler aus.
...
Coole Sache. Hab ich bei mir auch gleich mal eingestellt.

Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Zählvariable ändert ihren Wert

Beitrag von Warf »

kralle hat geschrieben:
So 18. Feb 2024, 18:01
Ich werde rot und stelle mich in de Ecke zum Schämen ...
Keine sorge, das Problem bist nicht du, das passiert öfter da Lazarus beim autocomplete das Semikolon Automatisch erzeugt.

Man könnte sogar soweit gehen und sagen das die Tatsache das leere statements überhaupt erlaubt sind ist ein Fehler im Sprachdesign. Man braucht leere statements so selten das es in den meisten Fällen ein Fehler ist. Darum haben andere Sprachen explizite "noop" keywords (z.b. pass in python) und erlauben leere statements überhaupt nicht

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 338
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: Zählvariable ändert ihren Wert

Beitrag von Niesi »

martin_frb hat geschrieben:
So 18. Feb 2024, 21:15
Und daher sieht das bei mir auch direkt im Editor nach Fehler aus.
Danke - das ist mal ein echt hilfreicher Tipp - habe ich mir jetzt auch eingerichtet. Das automatisch hinzugefügte Semikolon z. B. kann echt nerven.

Und: Wieder was gelernt ... :D
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Zählvariable ändert ihren Wert

Beitrag von Mathias »

Wieso ist bei mir alles grau und leer ? ( siehe Anhang )
Muss man da noch eine Package installieren ?
Ich habe eine relativ neue Trunk 3.99

@ martin_frb
Was hast du für ein komisches Widget-Set ?
Da musste ich 2x gucken, um zu schauen, welche Reiter in der TreeView links zusammengehören.
Bei mir im Anhang sieht es viele übersichtlicher aus.
Dateianhänge
Bildschirmfoto vom 2024-02-19 19-14-22.png
Bildschirmfoto vom 2024-02-19 19-14-22.png (97.3 KiB) 4907 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6216
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zählvariable ändert ihren Wert

Beitrag von af0815 »

Mal eine Liste hinzufügen, dann kann man die Bearbeiten und das Grau verschwindet
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Zählvariable ändert ihren Wert

Beitrag von Mathias »

af0815 hat geschrieben:
Mo 19. Feb 2024, 19:25
Mal eine Liste hinzufügen, dann kann man die Bearbeiten und das Grau verschwindet
Jetzt schnalle ich es, man muss die Liste selbst befüllen.

Das Problem mit dem "; " habe ich anders gelöst. Ich habe bei mir JEDI so eingrestellt, das er immer en begin und end macht..
Aus dem

Code: Alles auswählen

  for i:=0 to 100 do;
  begin
    WriteLn();
  end;  
wird

Code: Alles auswählen

  for i := 0 to 100 do begin
  end;
  begin
    WriteLn();
  end;    
Wen ich Ctrl+D drücke.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Zählvariable ändert ihren Wert

Beitrag von Maik81SE »

Riesen dank an von meiner Seite für den Tip ;)

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

martin_frb
Beiträge: 573
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Zählvariable ändert ihren Wert

Beitrag von martin_frb »

Am besten auch "do ;" mit einem Leerzeichen. (ggf auch mit 2)

"Match bound at start" => damit "Kommando;" nicht falsch erkannt wird.

";)" kann in "const a: record ... end = ...." vorkommen... Aber so selten...

Meine Liste (Kann man in den editoroptions.xml einfügen, oder per Options Dialog)

Code: Alles auswählen

          <Entry0 SearchTerm="then;" MatchWordBounds="soBoundsAtStart"/>
          <Entry1 SearchTerm="then ;" MatchWordBounds="soBoundsAtStart"/>
          <Entry2 SearchTerm="else;" MatchWordBounds="soBoundsAtStart"/>
          <Entry3 SearchTerm="else ;" MatchWordBounds="soBoundsAtStart"/>
          <Entry4 SearchTerm=";;"/>
          <Entry5 SearchTerm=";="/>
          <Entry6 SearchTerm="begin;" MatchWordBounds="soBoundsAtStart"/>
          <Entry7 SearchTerm="begin ;" MatchWordBounds="soBoundsAtStart"/>
          <Entry8 SearchTerm=";)"/>
          <Entry9 SearchTerm="; )"/>
          <Entry10 SearchTerm="do;" MatchWordBounds="soBoundsAtStart"/>
          <Entry11 SearchTerm="do ;" MatchWordBounds="soBoundsAtStart"/>
          <Entry12 SearchTerm="try;" MatchWordBounds="soBoundsAtStart"/>
          <Entry13 SearchTerm="try ;" MatchWordBounds="soBoundsAtStart"/>
          <Entry14 SearchTerm=";then"/>
          <Entry15 SearchTerm="; then"/>

Antworten