2014-09-27 8 views
-1

Я новичок, так что успокойтесь. Моя проблема заключается в моем выходе. Если вы укажете полное имя, оно сработает. Должен ли я использовать что-то другое, кроме строки? Он корректно отображает результат изначально, но затем он также работает и добавляет строку с избыточным весом и дополнительный расчет. Он отлично работает, если вычисление суммируется с избыточным весом пользователя. Кроме того, заданная точность не применяется. Я в тупике.C++ Задачи калькулятора BMI

int main() 
{ 
    double height, weight, bmi; // height in inches, weight in pounds, bmi is total bmi of user 
    string name; // name of the user 
    int num; // the number 703 used for bmi calculation 
    num = 703; // constant used for bmi calculation 

    cout << "Please enter your full Name:"; // Asking the user to input their name 
    cin >> name; // Users name 

    cout << "Please enter your height(in inches):"; // User height in inches 
    cin >> height; // Users height 

    cout << "Please enter your weight(in lbs):"; //Users weight in lbs 
    cin >> weight; // Users weight 

    bmi = (weight/pow(height, 2)) * num; // the actual calculation of the bmi of the user 

    if (bmi >= 18.5 && bmi < 25) { 
     cout << name << " your BMI is " << setprecision(1) << bmi; // outputting to the user their actaul BMI 
     cout << endl; 
     cout << "You are in the optimal weight category!"; // outputting their category 
    } 

    else if (bmi < 18.5) { 
     cout << name << " your BMI is " << setprecision(1) << bmi; 
     cout << endl; 
     cout << "You are underweight."; 
    } 

    else (bmi >= 25); { 
     cout << name << " your BMI is " << setprecision(1) << bmi; 
     cout << endl; 
     cout << "You are overweight."; 
    } 

    return 0; 

} 
+0

Также смотрите на использование CIN и [почему мы называем CIN ясно и CIN игнорировать после чтения ввода] (http://stackoverflow.com/ вопросы/5131647/почему-бы-мы-колл-Cin-ясно-и-Cin-игнорируемых после чтения-вход) –

ответ

0

cin используя пробелы в качестве разделителя по умолчанию. Итак, когда вы вводите имя типа «First Last», cin >> name; будет использовать только слово «First», а cin >> height; попытается использовать «Last», и вы столкнетесь с ошибкой. Если вы хотите разрешить полные имена, попробуйте использовать std::getline.

0

Когда вы используете >> для ввода строки, вы получаете только слово ввода. Остальное полное имя пользователя находится там во входном буфере до следующей операции ввода, которая может быть, например, ввод целого числа. И тогда этот текст недействителен как целочисленная спецификация.

Вместо этого используйте getline, чтобы прочитать текст.


Проходя, чтобы получить предупреждения о, например, чистые выражения, используемые в качестве операторов (что обычно ошибочно, и есть пример этого в вашем коде), повышайте уровень предупреждения вашего компилятора. С Visual C++ используйте /W4. С g ++ используйте -Wall.

1

У вас есть паразитные точка с запятой на этой линии:

else (bmi >= 25); { 
Смежные вопросы