Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Eingabe von Buchstaben abfangen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.09.2008, 16:06 Uhr
Ollom



Hallo zusammen,
ich habe ein problem und zwar wenn ich bei der eingabe für die liter einen Buchstaben eingebe(es gibt ja immer wieder solche witzbolde) dann stürzt mein programm ab. was kann ich tun?

double mb;
char b;
do
{
cout<<"Haben sie Bier getrunken(j,n)?"<<endl;
cin >> b;
if ( b == 'j')
{cout<<"Wieviel Bier(5% Vol) haben sie getrunken?"<<endl<<"Biermenge in Lieter: ";
cin>> mb;
}
else if( b == 'n')
{mb=0;}
else
{cout<<"Sie können nur zwischen j/n wählen";}
}
while (b!='j' && b!='n');
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: