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


Anmelden zum Antworten