AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

endlosschleifenfehler mit while

Ein Thema von 5etH · begonnen am 2. Apr 2008 · letzter Beitrag vom 2. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#1

endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:38
Hallo Zusammen,

ich habe ein Programmfragment was 2 Tabellen miteinander vergleicht, die gespeicherte, und die aktuell geänderte. Leider springt er nicht aus der Whileschleife raus, obwohl die Zählvariable über den Row bzw ColCount hinaus geht. Ich finde den Gehler nicht, vielleicht könnt ihr mir weiter helfen

hier einmal das Fragment:

Delphi-Quellcode:

procedure TForm2.Button5Click(Sender: TObject);
var i,x : Integer;
begin
  i := 1;
  x := 1;
  LoadStringGrid(form1.StringGrid2, 'c:\DB\DB.txt');
  
while (gespeichert = true) or (i <= form1.StringGrid1.rowcount) do
    begin
      while (gespeichert = true) or (x <= form1.stringgrid1.ColCount) do
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
    end;

if gespeichert = false then
  begin
    if MessageDlg('Fenster schließen ohne speichern!?',
    mtWarning, [mbYes, mbNo], 0, mbYes) = mrYes then
      begin
      form1.close;
      form2.close;
      end;
  end
  else
    begin
      form1.close;
      form2.close;
    end;
end;
schonmal vielen Dank für eure Hilfe

euer 5etH
Manuel
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:41
Guten Morgen,

vielleicht läuft es so besser?

Delphi-Quellcode:
gespeichert := false;
while (not gespeichert) and (i <= form1.StringGrid1.rowcount -1) do
    begin
      while (not gespeichert) and (x <= form1.stringgrid1.ColCount -1) do
        begin
          if form1.stringgrid1.cells[i,x] = form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := true;
             end;
          x := x + 1;
        end;
     i := i + 1;
    end;
[edit]Code korregiert [/edit]

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#3

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:45
nein funktioniert leider nicht
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#4

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:45
Nur so btw:
Tipps:
  • Prüfe nie auf '= true'! Wenn du das haben willst, lasse das '= true' einfach weg, das hat den selben Effekt.
  • Genauso ist es mit '= false', hänge dann einfach ein 'not' vor die Bedingung, z.B.: if not Checked then
[equote:f4204a376d="Warum?"]Hier findest du eine Antwort
[/equote:f4204a376d]
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:48
Zitat von 5etH:
nein funktioniert leider nicht
Ich habe oben noch mal etwas geändert.
Hast Du immer noch die "Endlosschleife"?
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:48
Delphi-Quellcode:
while (gespeichert) and (i < form1.StringGrid1.rowcount) do
    begin
      while (gespeichert) and (x < form1.stringgrid1.ColCount) do
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
    end;
So vielleicht?

[edit] <= in < geändert [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#7

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:49
1. danke für den tipp wegen dem auf true und fals testen

2. wieso sollte ich vor der schleife gespeichert auf false setzen ? ... dann brauche ich sie nicht ... also jedesmal wenn ich die tabelle temporär speicher also nicht in einer datei wird gespeichter auf true gesetzt ... ich will erreichen, dass er abfragt beenden ohne speicher...

also im debugger zählt er die variable bis ins unendliche obwohl er ja abbrechen soll sobald die zahl größer als der row oder colcount ist.
Manuel
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#8

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:49
Hi,

du muss die innere Zählvariable zurücksetzen:
Delphi-Quellcode:
while (gespeichert = true) or (i <= form1.StringGrid1.rowcount) do
    begin
      while (gespeichert = true) or (x <= form1.stringgrid1.ColCount) do
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
     x := 1; <--------------- hier
    end;
Gruß
Norman
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#9

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:51
Auf jeden Fall ist das or falsch und muss durch and ersetzt werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#10

Re: endlosschleifenfehler mit while

  Alt 2. Apr 2008, 10:59
schon aber er kommt aus der zweiter schleife wie makiert nicht heraus

Delphi-Quellcode:
while (gespeichert = true) or (i <= form1.StringGrid1.rowcount) do
    begin
      while (gespeichert = true) or (x <= form1.stringgrid1.ColCount) do <--------------- hier
        begin
          if form1.stringgrid1.cells[i,x] <> form1.stringgrid2.cells[i,x] then
             begin
               gespeichert := false;
             end;
          x := x + 1;
        end;
     i := i + 1;
     x := 1;
    end;
Manuel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz