I have been working on some code that calculates your BMI and then puts you into a category based on that. every time i try and run this program it either tells me that I am in the underweight class or the average class and I have no idea why please help

this is the part of the code that sorts the BMI to the correct category

``````if(weight <= 18.4){
cout << "Your BMI is " << weight << " you are underweight." << endl;
getch();
return 0;
}

if(weight <= 24.9 || weight >= 18.5){
cout << "Your BMI is " << weight << " you are average." << endl;
getch();
return 0;
}

if(weight <= 29.9 || weight >= 25.0){
cout << "Your BMI is " << weight << " you are overweight." << endl;
getch();
return 0;
}

if(weight >= 30.0){
cout << "Your BMI is " << weight << "you are Obese." << endl;
getch();
return 0;
}``````

3
Contributors
3
Replies
4
Views
6 Years
Discussion Span
Last Post by WaltP

You are getting that because you have used the || logical operator. It should have been &&.

``````if(weight <= 24.9 || weight >= 18.5){
cout << "Your BMI is " << weight << " you are average." << endl;
getch();
return 0;
}``````

Here if you give 16 as input, then 16 is less than 18.5 so it will print "You are underweight", In the next if condition 16 is less than 24.5 so "you are average" will also printed.

Edited by Arbus: n/a

Thank you for the help

Actually, you don't need the && at all. And you can shorten your code dramatically by looking more carefully at it:

``````if (weight <= 18.4)
{
cout << "Your BMI is " << weight << " you are underweight." << endl;
}
else
if (weight <= 24.9)  // weight cannot be less than 18.4
{
cout << "Your BMI is " << weight << " you are average." << endl;
}
else
if (weight <= 29.9)  // weight cannot be less than 24.9
{
cout << "Your BMI is " << weight << " you are overweight." << endl;
}
else
if (weight >= 30.0)
{
cout << "Your BMI is " << weight << "you are Obese." << endl;
}

getch();    // All your tests do this, so do it once.
return 0;
}``````
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.