Menüführung



  • Hallo

    ich will ein kleines Konsolenmenü bauen und habe das unter C immer z.B.: so gelöst

    1. irgendwas
    2. was anderes

    Geben Sie 1 oder 2 ein.

    Jetzt würde ich in c++ die eingabe in einen String speichern mit getline, daraus einen stringstream machen und daraus die Zahl auslesen.
    Diese dann switchen usw.

    Frage.. Passt das so , oder macht ihr Profis das generell anders??



  • Wieso in einen String speichern?
    Lies doch direkt von deinem input device.



  • Naja, ich dachte hald wenn einer statt "1" z.B. "du kannst mich mal " oder so eingibt. Untersuchen muss ich die Eingabe ja so oder so... ?



  • Unter Windows? Dann sieh mal hierein, vielleicht kannst Du das gebrauchen:
    http://www.c-plusplus.net/forum/303169



  • Spitzensache! Danke Belli



  • menu schrieb:

    Naja, ich dachte hald wenn einer statt "1" z.B. "du kannst mich mal " oder so eingibt. Untersuchen muss ich die Eingabe ja so oder so... ?

    Auch wenn du das evtl. nicht mehr brauchst.
    Was denkst du, ist der Unterschied zwischen:

    std::cin >> number;
    

    und

    stringstream >> number;
    

    In beiden Fällen wird bei ungültiger Zahl ("du kannst mich mal"), der Stream auf einen Fehlerzustand gelöscht. Das heißt du brauchst eine Schleife:

    while (!std::cin >> number) // solange einlesen nicht klappt, ggf. hier noch Rangecheck einfügen
    {
      std::cin.clear(); // resette Fehlerflags
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // lösche alle Zeichen, die noch im Stream stehen
     // notwendig, weil bei einer Eingabe von 123abc,
     // die Zeichen abc noch im Stream stehen würden,
     // d.h. eine erneute Iteration wieder fehlschlägt
    }
    

    Und du musst dasselbe machen, unabhängig ob du jetzt von einem String ausgehst oder direkt von cin. Den Ansatz "lese String + verarbeite String" haben viele, macht aber keinen Sinn, schließlich können alle Streams direkt verarbeiten. Lese direkt das Format was du brauchst!
    Das jetzt nur als Tipp für die Zukunft.



  • @Nathan auch Dir vielen Dank, werde mir das für die Zukunft merken!



  • @Nathan:
    In Deinem obigen Beispiel ... würde die Eingabe von 123abc überhaupt einen Fehler im Stream erzeugen?


Anmelden zum Antworten