005
22.11.2006, 16:52 Uhr
0xdeadbeef
Gott (Operator)
|
Zitat von xXx: |
C++: |
int _tmain(int, _TCHAR**)
|
|
...das verbitte ich mir 1. sowieso und 2. zumindest im ANSI-C++-Forum.
C++: |
int main(int argc, char *argv[]);
|
...soviel Standard muss sein
Ansonsten,
Zitat von ~Sancho: |
C++: |
case 5: exit(0); break;
|
|
exit() ist in C++ unter keinen Umständen zu benutzen. Der Hintergrund ist, dass das Programm dadurch sofort beendet wird, ohne vorhandene Objekte ordnungsgemäß zu zerstören. Wenn du unbedingt eine solche Funktionalität brauchst - und ich halte das an dieser Stelle eh für einen Designfehler - schmeiß eine exception, die nicht gefangen werden kann/soll.
Was das eigentliche Problem angeht, sobald ein Buchstabe im Stream steht, schlägt das einlesen von Zahlen verständlicherweise fehl - man kann sich das ein bisschen wie Streamtrombose vorstellen. Bei Usereingaben sinnvoll ist daher häufig eine gebufferte Eingabebehandlung, ie zeilenweises Einlesen. Das sieht dann in der Praxis so aus:
C++: |
#include <iostream> #include <sstream> #include <string>
// ...
int read_int(std::string const &prompt) { std::istringstream isstr; std::string line; int x;
do { std::cout << prompt << std::flush; std::getline(std::cin, line); isstr.clear(); isstr.str(line); isstr >> x; } while(!isstr);
return x; }
// ...
int x = read_int("Zahl eingeben: ");
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 22.11.2006 um 16:53 Uhr von 0xdeadbeef editiert. |