Основная проблема, как указывали другие, заключалась в использовании оператора присваивания вместо оператора равенства. Помимо предложения включить предупреждения компилятора, я думаю, вам следует попробовать уменьшить размер кода, удалив повторяющиеся операторы. Вы можете получить подсказку из этого:
#include <iostream>
int main() {
double height;
double weight;
double bmi;
int gender;
const struct BMI {
int under;
int good;
int over;
} data[] = {{}, {20, 25, 29}, {21, 26, 30}};
std::cout << "Please enter your gender (1 for female, 2 for male) : ";
std::cin >> gender;
std::cout << "Please enter your height (in metres) : ";
std::cin >> height;
std::cout << "Please enter your weight (in kg) : ";
std::cin >> weight;
bmi = weight / (height * height);
std::cout << "Your BMI is : " << bmi << std::endl;
if (gender != 1 or gender != 2) {
std::cout << "Sorry we have no data for your gender!";
return 0;
}
if (bmi < data[gender].under)
std::cout << "Underweight. You need to eat more!";
else if (bmi < data[gender].good)
std::cout << "Normal. All good, please maintain!";
else if (bmi < data[gender].over)
std::cout << "Overweight. You need to control your diet and do exercise!";
else
std::cout << "Obese!! Please see your dietician for advice on proper diet and exercise.";
return 0;
}
PS: Вы упомянули, что пытались использовать switch-case
. Что ж, вы, должно быть, забыли поставить оператор break
в конце каждой метки case.