Как мне go об облегчении двойного цина? - PullRequest
0 голосов
/ 18 июня 2020

Это код BMI, который я написал на C ++. Однако, когда я выбираю вывод для мужчин (1). Он будет запрашивать рост и вес дважды. Я действительно запутался, и я попытался изменить код, поменять его на else и даже использовать операторы switch. Может кто-нибудь мне это прояснить? Если я решу использовать оператор else, вывод после ввода полностью исчезнет, ​​и программа завершится.

#include <iostream>
#include <string>
using namespace std;

int main()
{
double height;
double weight;
double bmi;
int gender;
cout <<"Please enter your gender.(1 for female) (2 for male)\n";
cin >>gender;
if (gender = 1){
     cout<<"Please enter your height in metres. ";
    cin>>height;
    cout<<"Please enter your weight in kg. ";
    cin>>weight;
    bmi=weight/(height*height);
     if (bmi <= 19){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Underweight. You need to eat more.";
    return 0;
    }
     if(bmi >= 20 && bmi <= 24){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Normal. All good, please maintain.";
    return 0;
    }
     if(bmi >= 25 && bmi <= 29){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Overweight. You need to control your diet and do exercise.";
    return 0;
    }
     if(bmi > 29){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Obese!! Please see your dietician for advice on proper diet and exercise.";
    return 0;
    }
}
 if(gender = 2){
    cout<<"Please enter your height in metres. ";
    cin>>height;
    cout<<"Please enter your weight in kg. ";
    cin>>weight;
    bmi=weight/(height*height);
     if (bmi <= 20){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Underweight. You need to eat more.";
    return 0;
    }
    if(bmi >= 21 && bmi <= 25){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Normal. All good, please maintain.";
    return 0;
    }
    if(bmi >= 26 && bmi <= 30){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Overweight. You need to control your diet and do exercise.";
    return 0;
    }
    if(bmi > 30){
    cout <<"Your bmi is "<<bmi<<endl;
    cout <<"Obese!! Please see your dietician for advice on proper diet and exercise.";
    return 0;
    }
 }


}

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Основная проблема, как указывали другие, заключалась в использовании оператора присваивания вместо оператора равенства. Помимо предложения включить предупреждения компилятора, я думаю, вам следует попробовать уменьшить размер кода, удалив повторяющиеся операторы. Вы можете получить подсказку из этого:

#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.

0 голосов
/ 18 июня 2020

Вы перепутали = и ==. Первый - присваивание , используйте его, если хотите изменить это значение переменной. Второй - равенство , используйте его, если хотите сравнить переменную со значением.

Другими словами,

if (gender = 1)

должно быть

if (gender == 1)

И то же самое для

if (gender = 2)

, которое должно быть

if (gender == 2)
...