001
10.09.2008, 18:44 Uhr
0xdeadbeef
Gott (Operator)
|
Am sinnvollsten wär's wohl, die Eingaben zeilenweise einzulesen und aus der Zeile zu parsen, in etwa so:
C++: |
#include <sstream> // für std::istringstream
// ...
double mb; std::istringstream in; std::string zeile;
do { std::cout << "Biermenge in Litern: " << std::flush; std::getline(std::cin, zeile);
in.clear(); in.str(zeile);
in >> mb; } while(!in);
|
Ggf. ist es sinnvoll, das in eine Funktionsvorlage zu packen:
C++: |
template <typename T> T read_type(std::string const &prompt) { std::istringstream in; std::string zeile;
T ret;
do { std::cout << prompt << std::flush; std::getline(std::cin, zeile);
in.clear(); in.str(zeile);
in >> ret; } while(!in);
return ret; }
// Und dann so benutzen:
mb = read_type<double>("Biermenge in Litern: ");
|
Ansonsten kannst du den Rest der Zeile auch direkt aus std::cin schmeißen, per
C++: |
#include <limits> #include <iostream>
// ...
std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
...und das dann halt wie oben in eine entsprechende Schleife einbauen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |