Wie funktioniert das ?



  • Hallo,
    ich versuche vergeblich zu erziehlen, dass wenn ich [Enter] in eine Befehlsleiste eingebe, dass die Befehlsleiste wiederrum erscheint.

    Beispiel

    Ausgabe :

    Geben Sie einen Befehl ein> //Enter wurde getippt
    Geben Sie einen Befehl ein>

    und nicht

    Geben Sie einen Befehl ein> //Enter wurde getippt
    _ //Leere Zeile



  • Was hast Du denn bisher versucht um das zu erreichen 😕

    Die Standardantwort hier wäre imho "mit cout?" 😉 Evtl. hilft Dir der Hinweis auf std::flush schon weiter:

    std::cout << "Prompt> " << std::flush;
    


  • //...
    #include <string>
    
    //...
    
    char ch_enter(13);   //13 ist glaub ich der ASCII Wert für Enter
    string command;
    
    //...
    
    CommandLine:
        cout << "\nGeben Sie einen Befehl ein> ";
        cin >> command;
    
    //....
    
    if (command == ch_enter) {             //Hier zeigt der Compiler ein Fehler an
                    goto CommandLine;
                    }
    


  • while(true)
    {
        cout << "\nGeben Sie einen Befehl ein> ";
        cin >> command;
        //Auswertung und Verarbeitung von command
        //um aus der while-Schleife rauszuspringen break; benutzen
    }
    


  • Als damit funktioniert das bei mir nicht.
    Der Fehler wird immer noch Angezeigt (siehe 3.Beitrag von oben).



  • ioBen schrieb:

    Als damit funktioniert das bei mir nicht.
    Der Fehler wird immer noch Angezeigt (siehe 3.Beitrag von oben).

    Liegt vermutlich daran, dass man nicht einfach einen std::string mit nem char vergleichen kann?!

    Kleine Erweiterung von schorschs code 😃 :

    std::string command("");
    while(command != "exit") {  //Mit exit verlassen wir den Prompt
        cout << "\nGeben Sie einen Befehl ein> ";
        cin >> command;
        //Auswertung und Verarbeitung von command
    }
    

    MfG

    GPC



  • Ok, dass hat nur jetzt weiter geholfen 😉
    Die Datentypen sollte ich mal wiederholen ^^

    Also thx



  • Dein Hauptproblem ist, daß cin alle Whitespaces (inklusive ENTER) ignoriert, bis das erste "echte" Zeichen kommt. Um das zu umgehen, kannst du deine Eingabe etwas umstellen:

    string command;
    while(command!="exit")
    {
      cout<<"Bitte Befehl eingeben>";
      getline(cin,command);
    
      if(command.empty())
        continue;
    
      ...
    }
    

    (btw solltest du "goto" lieber vermeiden - zumindest solange du es nicht unbedingt brauchst)


Log in to reply