ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
1087
1087
EMPFEHLEN
-
Hey Leute,
Ich hab hier ein kurioses Problem.
Ich bin dabei ein kleines Programm zu schreiben, in Embarcadero Delphi 2010.
Dazu muss ich String-Passagen in Integer umwandeln, dazu hab ich mir eine Prozedur geschrieben die wie folgt aussieht:
Code :1 2 3 4 5 6 7 8 9
function get_digit(term :string; var i :string) :integer; var temp :string; begin temp := ''; while isdigit(term[i]) and (i < length(term)-1) do begin temp := temp + term[i]; end; get_digit := strtoint(temp); end;
Wenn ich nun compiliere meldet der Debugger immer
Code :1
[DCC Error] Übung1.pas(65): E2010 Incompatible types: 'Integer' and 'string'
und zwar zu den Stellen:
Code :1 2 3
isdigit(term[i]) length(term)-1 term[i]
Hoffe mir kann einer das Problem erklären. Ich seh den Fehler leider nicht...
-
15.04.10 21:54 #2
- Registriert seit
- Mar 2007
- Beiträge
- 90
Hallo!
Du hast im Funktionsaufruf die Variable i als String definiert. In der der while - Bedingung benutzt Du diese Variable aber als integer und genau dies meckert der Compile auch an.
Dein Code müßte wie folgt aussehen:
Code :1 2 3 4 5 6 7 8 9
function get_digit(term :string; var i :integer) :integer; var temp :string; begin temp := ''; while isdigit(term[i]) and (i < length(term)-1) do begin temp := temp + term[i]; end; Result := strtoint(temp); end;
Bei der Zuweisung des Funktionsergebnisses brauchst Du den Funtionsnamen nicht zu wiederholen. Es reicht, wenn Du Result:= (s. Listing) sagst.
Noch ein paar Tips zu Deinem Code.
Du solltest prüfen ob Dein String auch wirklich eine gültige Integerzahl ergibt. Deshalb würde ich bei die Zeile temp:=temp+term[i] lieber so scheiben:
Code :1 2 3
if temp[i] in ['0'..'9'] then temp:=temp+term[i] else exit;
Nur wenn der Stringteil eine gültige Zahl ist, dann weitermachen ansonsten aussteigen. Den else Zweig könnte man natürlich auch anders formulieren - man muß nicht unbegingt komplett aussteige
Dann würde ich am Anfang noch eine generelle Initialisierung der Funktion machen, d.h. dafür sorgen, daß es immer einen definierten Rückgabewert gibt - z.B. Result:=0 (nach begin) einfügen. Wenn Du sicher bist, daß Du nur positive Zahlen bei Deiner Umwandlung erhältst, dann ist es sinnvoll die Funktion mit Result=-1 zu initialisieren. Du könntest dann diesen Wert abfragen und weißt sofort, daß da was schief gelaufen ist.
Noch ne Frage: Warum wird i als var Parameter deklariert ? Du veränderst i in der Funktion nicht, demzufolge mußt Du auch keinen veränderten Wert zurückgeben.
Twinsetter
-
haha, oh mann. wenn man zu lang vor diesem kasten sitzt sieht mann iwann den wald vor lauter bäumen nicht mehr... danke
Thema kann geschlossen werden.
i wird eigentlich noch innerhalb der schleife hochgezählt. und dass es eine integer zahl ist steht auch schon fest : )
mich hat nur das i gewurmt :PGeändert von morph3uz (15.04.10 um 22:32 Uhr)
Ähnliche Themen
-
Wahrscheinlich ein Anfängerproblem...
Von TichaWutz im Forum CSSAntworten: 3Letzter Beitrag: 06.11.10, 22:13 -
CSS wahrscheinlich Vererbungsproblem
Von skywalkerluk im Forum CSSAntworten: 18Letzter Beitrag: 08.01.10, 22:05 -
MySql - Wenn falsche Datumseingabe, dann Meldung...
Von Newcomer1 im Forum PHPAntworten: 2Letzter Beitrag: 28.07.05, 14:39 -
MySql - Wenn falsche Datumsangabe, dann Meldung...
Von Newcomer1 im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 26.07.05, 15:55 -
debugger-meldung: was ist daran falsch?
Von Edgecrusher im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 13.08.02, 08:58





Zitieren
Login




