std::cin Probleme Konsole



  • Hi Leute

    ich bin gerade dabei die Konsole eines Servers weiterzuentwickeln.

    Habe hier mal den relevanten Code aufgelistet:

    Die Kommandoschleife:

    while ( !QuitServer )
    {
        cout << ">";
        cin >> Command;
        cout << endl;
        QuitServer = ProcessCommands( Command );
    }
    

    Hier die Kommandoverarbeitung:

    bool Cfoobarklasse::ProcessCommands( string &Command )
    {
        if ( Command == "?" )
        {
            ...
        }
        ...
        if ( Command.find( "addshare" ) == 0 )
        {
            Ctextparser tp( Command, " " );
    	if ( ( tp.GetString(0) == "addshare" ) && ( tp.GetAnzStrings() == 2 ) )
    	{
    	    if ( ( tp.GetString(1) == "?" ) || ( tp.GetString(1) == "--help" ))
                {
                     ...
                }
            } 
        }
        ...
    }
    

    Edit: entschuldigt bitte die nicht ganz perfekte Formatierung, aber scheinbar ist das Ding hier nicht in der Lage, den Cpp-Code so darzustellen wie ich ihn hier ein getippelt habe 😉

    Der Befehl "addshare" soll noch einen Parameter ermöglichen. Also z.B. "--help" oder "?", bzw. auch die ein richtiger Parameter.

    Wenn ich jetzt allerdings "addshare ?" eingebe, dann wird die Befehlsfolge nicht so interpretiert wie ich mir das dachte. Eigentlich sollte die "Hilfe" zum Befehl "addshare" erscheinen.

    Jedoch wird der Befehl "addshare ?" anders interpretiert.

    Einmal wird "addshare" verarbeitet und darauf hin "?" unabhängig davon, als hätte ich die zwei Befehle getrennt eingegeben.

    Die Funktion "ProcessCommands" wird auch tatsächlich zweimal aufgerufen, weil "cin >> Commands" das Leerzeichen zwischen "addshare" und "?" ganz offensichtlich als Trenner interpretiert.

    Warum?



  • Für das was Du machen willst, nimmt man typischerweise std::getline .
    Zur Arbeitsweise von std::istream::operator>>(...) guck das mal das hier an.



  • Danke, funzt 🙂


Anmelden zum Antworten