String überprüfen auf Inhalt in C++ Builder 6.0
-
HI.
Ich habe folgendes Problem. Ich will über ein Eingabefenster Zahlen in mein Programm einlesen. Dies funktioniert im Borland C++ Builder 6.0 wir folgt:
void __fastcall THauptfenster::Button1Click(TObject *Sender) { String text; double val; text = Edit1->Text; val = text.ToDouble(); }Wie kann ich aber, bevor ich den String text in eine double Variable umwandel überprüfen, ob es sich auch wirklich um eine Zahl in text handelt und nicht irgendwelche Buchstaben bzw. Sonderzeichen drin sind?
DANKE.
V.K.
-
Du könntest strtod() verwenden, um den String umzuwandeln - das gibt dir auf Wunsch einen Zeiger auf das erste Zeichen, das nicht erkannt wurde (und wenn dieses Zeichen etwas anderes als ein '\0' ist, stand Müll in deinem Eingabestring).
-
Konvertierung von 'AnsiString' nach 'const char *' nicht möglich
Danke für die schnelle Antwort. Leider bekomme ich jetzt obige Fehlermeldung, wenn ich folgenden Code schreibe:
void __fastcall THauptfenster::Button1Click(TObject *Sender) { String text; char *ep1; text = Edit1->Text; double zahl = strtod(text,&ep1); }EDIT:
Habe die Lösung schon, geht natürlich mit "text.c_str()".
-
EDIT:
bitte unteren Beitrag lesen
-
Hi CStoll,
deine Methode funktioniert gut, aber manchmal klappt es nicht. Ich habe es erstmal so umgesetzt:
int i,grenze; double param[3]; char *ep1,*ep2,*ep3; grenze = 10000; Edit1->Text = FloatToStrF(rand()%grenze/100.0,ffFixed,7,2); Edit2->Text = FloatToStrF(rand()%grenze/100.0,ffFixed,7,2); Edit3->Text = FloatToStrF(rand()%grenze/100.0,ffFixed,7,2); param[0] = strtod(Edit1->Text.c_str(),&ep1); param[1] = strtod(Edit2->Text.c_str(),&ep2); param[2] = strtod(Edit3->Text.c_str(),&ep3); if (ep1[0] != '\0' || ep2[0] != '\0' || ep3[0] != '\0') Application->MessageBoxA("Die eingegebenen Werte sind nicht alle Zahlen!\n" "Bitte beachten: Punkt als Komma eingeben.","Eingabefehler",MB_ICONERROR);Was jetzt passiert, ist dass bei manchen Zahl, z.B. wenn ich schreiben würde:
Edit1->Text = FloatToStrF(0.89,ffFixed,7,2);der Code nicht korrekt funktioniert, d.h., ep1 würde eine Zahl enthalten und nicht ’\0 ’. Was mache ich da noch falsch?
Danke.
V.K.
-
Was genau schreibt denn FloatToStrF()? Werden dort die Zahlen mit Punkt oder Komma dargestellt?
Ansonsten kannst du mal in der Borland Hilfe nachsehen, was die noch für Alternativen zu ToDouble() anzubieten haben (vielleicht sowas wie ToDoubleDef(), was einen Defaultwert zurückliefert, wenn die Eingabe ungültig war).
-
Hi CStoll,
die Daten werden eigentlich mit Komma dargestellt. Aber mittels
DecimalSeparator = '.';kann man auf Punkt umstellen.
V.K.
-
VerbalKint schrieb:
Aber mittels
DecimalSeparator = '.';kann man auf Punkt umstellen.
Dann mach das doch auch;) Das dürfte einfacher sein, als strtod() das deutsche Zahlenformat beibringen zu wollen.
-
Hab ich doch schon gemacht
Meine Zufallszahlen sind alle mit Punkt dargestellt. Funktionieren tuts trotzdem nicht.
-
Dann solltest du dir mal ausgeben lassen, welche Zahl nicht umgewandelt werden konnte - und an welchem Zeichen diese Umwandlung gescheitert ist.
-
*Unsinn*