2010-06-24 4 views
1

Lorsque je déclare int weight et d'entrer une double valeur 165.1, une deuxième cin >> height; ne fonctionne pas et aucun message d'erreur ne s'affiche. Peux-tu me dire pourquoi?Une question à propos de cin en C++

Console VS2010 Application utilisée.

#include <iostream> 

using namespace std; 

const double lbs_to_kg = 2.2046, inches_to_meter = 39.370; 

int main() 
{ 
    int weight, height; 
    double kilograms, meters; 

    cout << "\nEnter weight in pounds: "; 
    cin >> weight; 
    kilograms = weight/lbs_to_kg; 
    cout << "\nEnter height in inches: "; 
    cin >> height; 
    meters = height/inches_to_meter; 
    cout << "\nYour BMI is approximately " 
     << "\nbody fat ratio is " 
     << kilograms/(meters * meters) 
     << ". Under 25 is good." 
     << endl; 

} 

output: 

Enter weight in pounds: 165.1 

Enter height in inches: 
Your BMI is approximately 
body fat ratio is 1.57219e-013. Under 25 is good. 
+0

Hmm .. ce serait un taux intéressant de graisse corporelle. –

+4

@Billy: C'est le régime à virgule flottante. Vous passez tellement de temps à essayer de comprendre les effets des opérations à virgule flottante dans votre programme, vous oubliez de manger pendant un mois. –

Répondre

13

Si vous essayez d'avoir cin d'extraire des données dans une variable qui ne peut pas tenir, les données sont laissés dans le flux d'entrée et cin est marqué comme ayant échoué. Vous devez vérifier s'il a échoué avec !cin et utiliser cin.clear() pour effacer l'indicateur d'échec afin de pouvoir le relire (les futures opérations d'extraction échoueront automatiquement jusqu'à ce que l'indicateur soit effacé). Vous pouvez soit extraire les données dans une variable différente qui est capable de le tenir, ou utiliser cin.ignore() pour le rejeter