Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - for-do schleife ist fehler haft
Xearox - So 24.01.10 12:02
Titel: for-do schleife ist fehler haft
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Button1Click(Sender: TObject); var I,x:Integer;
begin test:=false; repeat for I:=1 to 10 do begin if ESchluessel.Text=Schluessel[I] then begin showmessage('Programm Erfolgreich Aktiviert'); Test:=True; end; end; until test=true;
if WrongKey=false then begin ShowMessage('Falscher Serial-Code, erneut eingeben oder mit eingeschränkter Funktionalität forfahren'); end;
end; |
So hier hab ich eine einfach for-do schleife, die ich mit hilfe einer Variablen I von 1 bis zu 10 laufen lassen möchte.
Gleichzeitig wird im programm geprüft, ob der eingetragene Schlüssel auch dem Schlüssel entspricht, der als Array festgelegt wurde...
Jedoch macht die for-do schleife nicht das, was sie soll, statt: 1,2,3,4,5,6,7,8,9,10 macht die 10,9,8,7,6,5,4,3,2,1...
und wenn ich I:=10 downto 1 mache macht die folgendes: -10,-9,-8,-7,-6,-5,-4,-3,-2,-1
Diese Werte bekomme ich im Debugger angezeigt...
Kann mir da jemand helfen?
jaenicke - So 24.01.10 12:09
Das ist vollkommen normal und eine Optimierung des Compilers. Die Schleife läuft aber korrekt was die verwendeten Werte im Quelltext angeht. Du siehst nur im Debugger die realen optimierten Werte, weil der die Optimierung nicht mitbekommt.
Zum Debuggen solltest du daher die Optimierung in den Compileroptionen ausschalten, musst nur eben daran denken diese wieder zu aktivieren, wenn du das Programm auslieferst. Denn je nach Programm kann dieses ohne Optimierung spürbar langsamer sein.
Xion - So 24.01.10 12:11
Delphi-Quelltext
1:
| if ESchluessel.Text[I]=Schluessel[I] then |
müsste es nicht so heißen?
Dass der Debugger verbuggt ist, ist normal :D
Xearox - So 24.01.10 12:18
aber irgendwie ist das ganze ding schrott...macht nicht das, was er eig. machen soll...
jaenicke - So 24.01.10 12:22
In deinem Quelltext vergleichst du wie
Xion schon geschrieben hat den gesamten Inhalt von ESchluessel mit deinem einzelnen Arrayeintrag. Bist du sicher, dass du das so meintest? Und nicht wie er geschrieben hat? :gruebel:
Zudem: Wenn test nie true wird, hast du eine Endlosschleife...
ALF - So 24.01.10 12:34
hi,
WrongKey wird ja auch nicht gesetzt, lediglich abgefragt.
Du erhälst zum schluss immer die Meldung (Falscher Code).
Gruss Alf
Xearox - So 24.01.10 12:42
so, ich Esel hab natürlich, die Prozedure nicht mit dringehabt, welche dafür da ist, die Arrays zu festzulegen...dadurch wurde das EditFeld immer mit '' überprüft...
also mit nichts...
hab das mit Wrongkey eingefügt, und nun sieht es so aus...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.Button1Click(Sender: TObject); var I,x:Integer;
begin I:=1; SchluesselFestlegen; Test:=false; WrongKey:=false; repeat for I:=1 to 10 do begin if ESchluessel.Text=Schluessel[I] then begin showmessage('Programm Erfolgreich Aktiviert'); Test:=true; WrongKey:=true; end; end; until test=true;
if WrongKey=false then begin ShowMessage('Falscher Serial-Code, erneut eingeben oder mit eingeschränkter Funktionalität forfahren'); end;
end; |
jaenicke - So 24.01.10 12:44
Wie schon zweimal gesagt, so wie du es hast funktioniert es nur, wenn in ESchluessel genau das drin ist wie in
jedem Eintrag des Arrays...
Xearox hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3:
| for I:=1 to 10 do begin if ESchluessel.Text=Schluessel[I] then | |
Und den Fehler mit den boolschen Werten hast du auch noch drin. Liest du eigentlich die Beiträge?
ALF - So 24.01.10 12:48
Du kannst Dein repeat weglasen und wrongkey in der For schleife setzen und zum Schluss abfragen!
Delphi-Quelltext
1: 2: 3: 4: 5:
| if WrongKey then showmessage('Programm Erfolgreich Aktiviert') else ShowMessage('Falscher Serial-Code, erneut eingeben oder mit eingeschränkter Funktionalität forfahren') end; |
Gruss Alf
Xearox - So 24.01.10 13:17
ja klar, sonst würde ich ja nicht hier posten, oder?
und ich weiß auch, was du meinst...wenn im Edit Feld nicht der Key eingetragen wird, der Erwartet wird, kommt eine Endlosschleife zu stande, das problem hab ich ja...
Aber ich steige nicht dahin...wie ich nun das ohne dem machen kann...
ALF - So 24.01.10 13:21
Ich hab es dir auch geschrieben, schmeiss Deine Repaet raus und schon funct es :wink: ;
Xearox - So 24.01.10 13:23
wieso zum Henker mach ich da ein Repeat rein...was hat mich da geritten, wenn es auch ohne geht :(
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!