Einzelnen Beitrag anzeigen

hurzli

Registriert seit: 29. Okt 2004
6 Beiträge
 
Delphi 2007 Professional
 
#24

Re: Warum stürzt es immer ab?

  Alt 2. Dez 2008, 21:15
Leider kann man nur erahnen, was das Beispiel tun soll.
Man hat mir heute auch schon hier geholfen, das wird nun meine gute Tat für heute.

Erst habe ich einmal eine übersichtliche Einrückung verwendet.
Deinen Quellcode kann man (respektive ich und mein Vorredner/-schreiber auch) nicht lesen.
Scheinbar du selbst auch nicht, denn es ist lauter überflüssiges Zeug darin enthalten.
Und die Benennung der Variablen solltest du auch sprechender wählen.
Sonst guckst du in einem Monat wieder auf diese Zeilen und fragst dich, was das um Himmels Willen sein soll.
Kommentare, sprechende Variablennamen und Leerzeichen sind auf Dauer hilfreich!

Zum Code:

Warum nichts passiert ? until s[i] = ''; 1. Der Zähler [i] wird nie erhöht ==> der Klassiker, die Endlosschleife. Das ist eigentlich schon genug. Und 2. s[i] kann NIEMALS '' sein!
Also: wenn die Endlosschleife nicht reicht, setzt man eben noch eine unerfüllbare Abbruchbedingung obendrauf !
(Für die einzeilige, doppelte Endlosschleife sollte man eigentlich einen Preis vergeben )
Genug jetzt!

Wenn ich den Code richtig interpretiert habe, willst du damit alle Ziffern aus einem String in einen anderen übertragen.
[z] konnte ich nicht finden, desshalb habe ich diese Variable als String definiert.
Den String [s] hole ich nicht aus einem Edit-Feld sondern setze ihn für das Beispiel direkt in der Funktion.
Übrig bleibt folgender Code. Ich habe absichtlich die auskommentierten Zeilen drin gelassen, damit du die Fehler sehen kannst.

Delphi-Quellcode:
uses ...., Dialogs, ...;

procedure TForm1.Button1Click(Sender: TObject);

var
   len,{j,}
   i{,x}     : integer;
   s : string;
   z : string;
   iErg : integer;

begin
// j := 0;
// s:=edit1.text;
   s := 'Hallali_123_hallo*45*lala-678?(uiui)-90';
   len := Length( s );
// for i := 0 to l - 1 do
   for i := 1 to len do
      begin
// repeat
            if( s[ i ] in [ '0'..'9' ] ) then
               begin
// SetLength( z, j + 1 ); // ist z ein Array ? Dann SetLength verwenden !
// z[ j ] := z[ j ] + s[ i ]; // <== ????
                  z := z + s[ i ]; // <== meinst du das ?
               end;
// until s[ i ] = '';

// j := j + 1;

      end;

    // Nachdem keine Vorzeichen berücksichtigt werden, kann der Wert NIE kleiner 0 werden.
    // ==> -1 ist das Ergebnis, wenn im String keine Ziffern enthalten waren.
   iErg := StrToIntDef( z, -1 );

   ShowMessage( Format( 'Ergebnis z : [%s], iErg : [%d]', [ z, iErg ] ));

end;
Das sollte es gewesen sein.

Grüßle
hurzli
  Mit Zitat antworten Zitat