Vergleich der Inhalte (Zahlen) von Edit-Feldern

spiesser

Grünschnabel
Hallo,

bin dabei, ein Programm mit dem Borland Builder zu erstellen mit dem Ziel, einen AVL-Baum darzustellen! Der Nutzer gibt dabei beliebige natürliche Zahlen in ein Edit-Fenster ein, diese sollen vom Programm in korrekter Form in einen Baum (bestehend aus weiteren Edit-Fenstern) angeordnet werden!

Soweit funktioniert alles, aber sobald die Eingaben einstellig bzw. dreistellig sind, gibt es Probleme! (Beispiel: 23 als Wurzel, nun soll die 5 eingefügt werden --> mein Programm fügt die 5 rechts unter die 23 ein, da 2 < 5) --> ich denke zumindest, dass es daran liegt, dass die Werte vom letzten Zeichen an verglichen werden!

Was muss ich tun, damit auch ein-/dreistellige Werte korrekt eingefügt werden?

Würde mich über eine Antwort sehr freuen,

spiesser
 
So ungefähr sieht der Vergleich aus:

StrToInt(Edit1->Text);
StrToInt(Edit2->Text);
StrToInt(Edit3->Text);
StrToInt(Edit16->Text); //in diesem Edit-Feld erfolgt Eingabe

if (Edit1->Text=="0")
{
Edit1->Text=Edit16->Text;
Edit1->Visible=true;
}
else if (Edit16->Text<Edit1->Text)
{
if (Edit2->Text=="0")
{
Edit2->Text=Edit16->Text;
Edit2->Visible=true;
}
}
else if (Edit16->Text>Edit1->Text)
{
if (Edit3->Text=="0")
{
Edit3->Text=Edit16->Text;
Edit3->Visible=true;
}
}

Was ist falsch?

spiesser
 
So weit ich das sehe, liegt der Fehler darin, daß du direkt die Strings (Editn->Text) mit einander vergleichst. Die Strings werden nämlich nicht im Hintergrund implizit mal kurz in Zahlen umgerechnet, sondern auch wirklich als Strings verglichen.
Somit ist der String "5" (gemäß des ersten ASCII-Zeichens) immer größer als der String "2476487568".
Wenn der Vergleich korrekt stattfinden soll, musst du vor dem Vergleich die Strings in wirkliche Zahlen (z.B. Integers) umwandeln.
 
Nein du musst es einer Variablen zuweisen und dann mit den Variablen arbeiten
C++:
int a = StrToInt(Edit1->Text)
int b = StrToInt(Edit2->Text)

if (a == 0) {}
if (a < b) {}
...

mfg
 
Du musst dir vor Augen halten, das StrToInt() eine Funktion ist, die ein Wert zurück liefert (in diesem Fall ein Integer Wert).

Die Funktion ändert nicht den Wert, der eingegeben wird, sondern gibt einen neuen Wert zurück mit dem Du dann arbeiten kannst. Du kannst den Wert wie schon gesagt, entweder speichern, oder direkt verarbeiten.

d.h. du brauchst nicht zwangsläufig Variablen zu definieren. Du kannst die Umwandlung einfach in den Vergleich packen:
Code:
if(StrToInt(Edit1->Text) > StrToInt(Edit2->Text)) // Vergleich, zweier INTEGER Werte
{...}

mfg
 
Zurück