Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » cin begrenzen

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
08.12.2004, 10:15 Uhr
~Anfänger_
Gast


hallo, weiss nicht, ob das hier reingehört, aber mein problem ist:
ich habe folgendes in meinem Programm:

Code:

double Eingabe()
{
    double m_Eingabe = 0.0;
    cout << "\nBitte waehlen:\nfuer lalala 1\n fuer lululu 2\n fuer lalelu 3:";
    cin >> m_Eingabe;
    return m_Eingabe;
}  

kann man hier eine Begrenzung vorgeben, dass nur die Eingabe von 1,2 oder 3 möglich ist???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2004, 10:20 Uhr
typecast
aka loddab
(Operator)


Das musst du schon von Hand machen:


C++:
do {
  cout << "\nBitte waehlen:\nfuer lalala 1\n fuer lululu 2\n fuer lalelu 3:";
  cin >> m_Eingabe;
} while (m_Eingabe < 1 && m_Eingabe > 3);


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2004, 10:24 Uhr
~Anfänger_
Gast


geiler anhang an deinem Profil: 90% lol, bei mir sind es 99% Fehler und 1% Unwissenheit...
Danke aber erstmal, ich werde es versuchen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2004, 10:30 Uhr
~Anfänger_
Gast



ok, habe es so versucht:

C++:
double Eingabe()
{
    double m_Eingabe = 0.0;
    do {
         cout << "\nBitte waehlen:\nfuer lalala 1\n fuer lululu 2\n fuer lalelu 3:";
         cin >> m_Eingabe;
    } while (m_Eingabe < 1 && m_Eingabe > 3);
  return m_Eingabe;
}  


er reagiert aber auf alle Eingaben
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.12.2004, 10:53 Uhr
virtual
Sexiest Bit alive
(Operator)


@~Anfänger_
Ich glaube du hast Die Vorstellung, daß wenn zB 4 eingegeben wird, die Eingabe verweigert wird, ggf. sogar nix auf dem Bildschirm erscheint? Das geht nicht mit ANSI C++. Du musst auf eine Systemspezifische Lösung umsteigen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.12.2004, 10:57 Uhr
~Anfänger_
Gast


ich dachte eigentlich dabei an so etwas, wie:

C++:
double Eingabe()
{
    double m_Eingabe = 0.0;
    if(m_Eingabe<=3)
    {
         return m_Eingabe;
    }
    else
    {
         cout<< "\nZahlenbereich ueberschritten! Neue Eingabe:";
         cin >> m_Eingabe
    }
}

so als schleife über die Eingabe, aber das funktioniert auch nicht so richtig
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.12.2004, 11:20 Uhr
virtual
Sexiest Bit alive
(Operator)


Also für sowas double zunehmen ist schon mal eine ganz doll schlechte Idee. doubles kann man in der Regel nicht verläßlich auf Gleichheit prüfen.

ich würde es in etwa so lösen:

C++:
int m_eingabe;

// Schleife, bis der User spurt
do
{
    std::cin>>m_eingabe;
    if (!std::cin || m_eingabe<1 || m_eingabe>3) {
       // Etwas anderes als 1-3 eingeben.
      std::cout<<"Zahlenbereich überschritten! Neue Eingabe!"<<std::endl;

      // Spezielle vorkehrung erforderlich, wenn zB ein Buchstabe eingegeben wurde:
      if (!std::cin) {
          std::cin.clear();
          std::cin.ignore();
      }
      
      // Sicher stellen, daß Schleife nicht verlassen wird
      m_eingabe = -1; // oder "continue;"
   }
} while(m_eingabe<1 || m_eingabe >3);


Alternativ:

C++:
int m_eingabe;

// Schleife, bis der User spurt
for(;;)
{
    std::cin>>m_eingabe;
    if (std::cin && m_eingabe>=1 && m_eingabe<=3) {
       break;
    }

    // Etwas anderes als 1-3 eingeben.
    std::cout<<"Zahlenbereich überschritten! Neue Eingabe!"<<std::endl;

    // Spezielle vorkehrung erforderlich, wenn zB ein Buchstabe eingegeben wurde:
    if (!std::cin) {
        std::cin.clear();
        std::cin.ignore();
    }
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.12.2004, 11:48 Uhr
~Anfänger_
Gast


Danke habe es so übernommen, verstanden, und es ist super^^

C++:
double Eingabe()
{
    int m_eingabe=-1;
    cout << "\nBitte waehlen:\nfuer lalala 1\n fuer lululu 2\n fuer lalelu 3:";

    // Schleife, bis der User spurt
    do
    {
    std::cin>>m_eingabe;
    if (!std::cin || m_eingabe<1 || m_eingabe>3) {
       // Etwas anderes als 1-3 eingeben.
      std::cout<<"Zahlenbereich überschritten! Neue Eingabe!"<<std::endl;

      // Spezielle vorkehrung erforderlich, wenn zB ein Buchstabe eingegeben wurde:
      if (!std::cin) {
          std::cin.clear();
          std::cin.ignore();
          }
      
      // Sicher stellen, daß Schleife nicht verlassen wird
      m_eingabe = -1; // oder "continue;"
     }
} while(m_eingabe<1 || m_eingabe >3);
return m_Eingabe;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: