2017-04-17 1 views
0

Jusqu'à présent, ceci est mon code:Comment faire des numéros d'entrée utilisateur uniquement en C++?

while(bet > remaining_money || bet < 100) 
    { 
     cout << "You may not bet lower than 100 or more than your current money. Characters are not accepted." << endl; 
     cout << "Please bet again: "; 
     cin >> bet; 
    } 

Il fonctionne très bien, mais je suis en train de comprendre comment faire boucle si l'utilisateur entre tout ce qui est pas un nombre aussi.

Lorsque j'appuie sur une lettre ou que je dis un symbole/un signe, le code se casse.

+0

Copie possible de [Comment gérer wr Ong type de données d'entrée] (http://stackoverflow.com/questions/10349857/how-to-handle-wrong-data-type-input) – Fureeish

Répondre

1

Je voudrais utiliser std::getline et std::string pour lire toute la ligne et ensuite seulement sortir de la boucle lorsque vous pouvez convertir la ligne entière en double.

#include <string> 
#include <sstream> 

int main() 
{ 
    std::string line; 
    double d; 
    while (std::getline(std::cin, line)) 
    { 
     std::stringstream ss(line); 
     if (ss >> d) 
     { 
      if (ss.eof()) 
      { // Success 
       break; 
      } 
     } 
     std::cout << "Error!" << std::endl; 
    } 
    std::cout << "Finally: " << d << std::endl; 
} 
+0

C'est probablement bien, mais un peu asymétrique en ce sens qu'il accepte/ignore les espaces avant la nombre mais pas après. Vous pouvez utiliser 'ss >> d >> std :: skipws' (et' #include ') pour autoriser les espaces à chaque extrémité, si c'est important. –

0

Utilisation de la fonction

isdigit() 

Cette fonction retourne true si l'argument est un chiffre décimal (0-9)

N'oubliez pas

#include <cctype>