Menüführung
-
Hallo
ich will ein kleines Konsolenmenü bauen und habe das unter C immer z.B.: so gelöst
- irgendwas
- 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?