![]() |
Fehlersuche
hey, ich habe versucht mir ein entschlüsselungsprogramm zu schreiben, wobei jeder buchstabe im verschlüsselten Text 'y' buchstaben hat. 'y' ist die erste Zahl in meinem EditFeld 1.
Wenn ich das Programm ausführe funktioniert es erst schon, aber wenn ic auf Button1 Klicke bekomme ich die Meldung Zitat:
hier ist mein Code
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var String2 : string; y : integer; Schalter : integer; begin // Variablen Deklarieren // String2 := Copy(Edit2.Text,1, Length(Edit2.Text)); y:= StrToInt(Copy(Edit1.Text,0,1)); Schalter := 0; x := 1 ; // Kontrollanzeige// Edit3.Text := IntToStr(x); Edit4.Text := IntToStr(y) ; // String stückeln// repeat begin sTemp1:= Copy(String2, 1, y); case StrToInt(sTemp) of 1234 : Memo1.Text := Pchar(Memo1.Text + 'a'); 5678 : Memo1.Text := Pchar(Memo1.Text + 'b'); end; String2 := Copy(Edit2.Text,y, Length(Edit2.Text)); y := y+y ; {Edit3.Text := IntToStr(x); Edit4.Text := IntToStr(y) ; } If (y >= (Length(Edit2.Text))) Then Schalter := 1 ; End; until (schalter = 1) ; end; ps. Danke schonmal für eure Hilfe |
Re: Fehlersuche
Zitat:
Also schau Dir mal ab, ob in Edit1 oder in dem temporären String nicht vielleicht nichts drin steht, was Du ungeprüft in eine Zahl umwandeln willst... |
Re: Fehlersuche
Irgendwo, wo du StrToInt() verwendest hast, wird ein Leerstring sein. Und das ergibt den Fehler.
Setze dir zu Beginn von der Prozedur einen Breakpoint, drücke F9 und klicke auf deinen Schalter. Danach gehst du Zeile für Zeile durch und schaust mal, was für Werte du so im einzelnen erhälst und siehst dann auch an welcher Stelle es hakt. Und dann guckst du dir mal ![]() |
Re: Fehlersuche
Was passiert, wenn Du
Zitat:
Delphi-Quellcode:
änderst? Eine weitere Fehlerquelle wäre sTemp, aber da das anscheinend eine globale Variable ist, kann man im Code nicht sehen, was drinstehen könnte.
y:= StrToInt(Copy(Edit1.Text,1,1));
|
Re: Fehlersuche
Wäre
Delphi-Quellcode:
nicht etwas lesbarer? ;) Es würde außerdem die Fehlerquellen minimieren.
y:= StrToInt(Edit1.Text[1]);
Genauso kannst du Edit1.Text direkt String2 zuweisen.
Delphi-Quellcode:
Edit:
String2 := Edit2.Text;
Das Beste wäre eine Eingangsprüfung auf Leerstrings. Oder TryStrToInt. |
Re: Fehlersuche
Zitat:
okay also das erste hat leider nichts gebracht ... so und zu sTemp das ist eine globale Variable, in der die ersten 'y' buchstaben von dem textfeld Edit2 stehen. dann soll/wird überprüft ob das gleich einer von meinen verschlüsselten buchstaben ist.... Zitat:
also ich weiß leider nicht wie das mit dem breakpoint funktioniert aber ich werde mir gerne das Tutorial durchlesen und hoffe ich bin danach schlauer. vielen dank für den link auf jedenfall !! lg |
Re: Fehlersuche
Zitat:
|
Re: Fehlersuche
Zitat:
für das bin ich auch dankbar und werde es gleich umändern. wobei der einwurf meines vorredners gut ist ... ich werde da nochmal drübernachdenken, denke aber, dass ich es so lassen werde wie es bislang ist, da ich das dann leichter auf 'die ersten 2 zahlen in dem Editfeld' umändern kann.... ich wusste nicht das
Delphi-Quellcode:
so einfach funktioniert ... ich dachte ich bekomme dann wieder irgend ne blö** fehlermeldung ....
String2 := Edit2.Text;
aber ich werde es jetzt mal ausprobieren |
Re: Fehlersuche
Zitat:
Delphi-Quellcode:
y:= StrToInt(Copy(Edit1.Text,0,1));
|
Re: Fehlersuche
Naja, der Copy-Befehl nimmt aber auch nur ein Zeichen, so wie er da steht.
[edit] *gnarf* macht doch alleine weiter *püh* [/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 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