2010-06-24 3 views
1

Когда я объявляю int weight, а затем вводим двойное значение 165.1 a 2 cin >> height; не работает и сообщений об ошибке нет. Можешь мне сказать почему?Вопрос о cin в C++

VS2010 Консольное приложение используется.

#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

Хм .. это было бы интересным соотношением жировых отложений. –

+4

@ Билли: Это диета с плавающей точкой. Вы тратите столько времени, пытаясь понять последствия операций с плавающей запятой в своей программе, вы забыли поесть в течение месяца. –

ответ

13

Если вы пытаетесь иметь cin извлекать данные в переменную, которая не может удерживать его, данные остаются во входном потоке и cin помечено как неудачников. Вам нужно проверить, не сработало ли оно с !cin и использовать cin.clear(), чтобы очистить флаг сбоя, чтобы вы могли прочитать его снова (будущие операции извлечения будут автоматически завершены до тех пор, пока флаг не будет очищен). Вы можете извлечь данные в другую переменную, способную удерживать ее, или использовать cin.ignore(), чтобы отменить ее.