AnsiString-Vergleich mit cin
-
Hallo,
ich habe folgendes Problem: Ich habe eine Konsolenanwendung mit VCL erstellt.
Darin lese ich jetzt über cin einen char*-Wert ein!Diesen vergleiche ich anschließend mit einem hardcodierten Wert:
char* TypedCommand; while(true) { cin >> TypedCommand; // Arbeite alle bekannten Befehle ab... if(AnsiString(TypedCommand) == AnsiString("exit")) { ShowMessage("Funktion aufgerufen"); // Beendet das Programm return 0; } else { dsPrintText("Invalid or unknown command, please retype!\n", dscRed); } TypedCommand = ""; // Lösche den Befehl, nachdem er abgearbeitet wurde... }Mein Problem ist jetzt, dass der Vergleich immer false ist! Selbst dann, wenn ich zweifelsfrei "exit" eingebe wird der else-Zweig ausgewertet. Hat jemand eine Idee, woran das liegen könnte?
-
Hi,
evtl. gibst du ja statt "exit" auch "exit\n" ein?MfG
Alexander Sulfrian
-
Was sagt denn der Debugger? Hast Du mal versucht, TypedCommand vorher in einen AnsiString zu
konvertieren (in eine AnsiString-Variable einzutüten), und Dir dann den Wert angesehen?Gruß,
Alexander
-
Ich hab' jetzt mal ein
ShowMessage("\""+AnsiString(TypedCommand)+"\"");vor das
TypedCommand = ""; // Lösche den Befehl, nachdem er abgearbeitet wurde...gesetzt, er hat mir "exit" ausgegeben (mit den Anführungsstrichen). Also kann es wohl nicht exit\n sein, oder?
-
Du könntest Dir auch eine zusätzliche Funktion erstellen, die Dir das eingetippte Kommando
aufbereitet.
Etwas in der Art:typedef int TInputCommand; // Besser geeignet wäre hier vielleicht enum... TInputCommand getInputCommand(char* typedCommand); // Implementierung überlasse ich Dir :)Dann kannst Du in Deinem Code einfach eine switch-Verzweigung einbauen.
Zum eigentlichen Problem: Ich würde an einer geeigneten Stelle mal einen Breakpoint setzen -
oder hast Du keinen Debugger?Gruß,
Alexander