意外地在C ++中移动了小数点

时间:2018-02-22 08:49:24

标签: c++

这是我在stackoverflow中的第一篇文章。我目前正在重新学习C ++,而且我无法理解在这个系统中变量double userBase [j] .height的意外更改值过程中发生了什么。

正如你在第一张照片中所看到的,一切似乎都运转良好: enter image description here

现在,每次我想从5数组结构中打印出所有收集信息的表时,高度值突然改变,并移动了2个小数点。 enter image description here

我目前正在查明问题的来源。我怀疑它来自setprecision(),但我不知道它是怎么发生的。

我的源代码:

#include <iostream>    
#include <iomanip>
#include <windows.h>

using namespace std;

const int size = 5;

struct users{

    double height, ft, in, weight, age;
    double bmi;
    int bmiLevel;
    string gender;
};

int main(){


users userBase[size];

    for(int i = 0; i<size; i++){

    cout << "Enter your weight (lbs): ";
    cin  >> userBase[i].weight;
    userBase[i].weight = userBase[i].weight*0.453592;


    cout << "Enter your height (feet): ";
    cin  >> userBase[i].ft;
    cout << "Enter your height (inches): ";
    cin  >> userBase[i].in;
    userBase[i].ft = userBase[i].ft * 30.48;
    userBase[i].in = userBase[i].in * 2.54;
    userBase[i].height = userBase[i].ft + userBase[i].in;

    cout << "\n\n\nheight and weight are converted to kilograms and centimeters respectively \n\n";

    cout << "Weight: " << userBase[i].weight << " kg" << endl;
    cout << "Height: " << userBase[i].height << " cm" << endl;

    userBase[i].height = userBase[i].height * 0.01;
    userBase[i].bmi = userBase[i].weight / (userBase[i].height*userBase[i].height);
    cout << "Your Body Mass Index (BMI): " << userBase[i].bmi << endl;

    if(userBase[i].bmi<18){
        cout << "Underweight! ";
    }
    if(userBase[i].bmi>18 && userBase[i].bmi<25){
        cout << "Ideal";
    }
    if(userBase[i].bmi>25 && userBase[i].bmi<30){
        cout << "Overweight";
    }
    if(userBase[i].bmi>30){
        cout <<"Obese";
    }
    system("CLS");
    }


    cout<<left<<fixed<<setprecision(2);
         cout<<"Weight         Height        BMI       Status \n";
        for(int j = 0; j < size; j++){

             cout<<setw(0)<<userBase[j].weight
                 <<setw(10)<<"kg"
                 <<setw(0)<<userBase[j].height
                 <<setw(10)<<"cm"
                 <<setw(10)<<userBase[j].bmi;

    if(userBase[j].bmi<18){
        cout << "Underweight! ";
    }
    if(userBase[j].bmi>18 && userBase[j].bmi<25){
        cout << "Ideal";
    }
    if(userBase[j].bmi>25 && userBase[j].bmi<30){
        cout << "Overweight";
    }
    if(userBase[j].bmi>30){
        cout <<"Obese";
    }
    cout << endl;
             }
}

我一直试图弄清楚这一个约一个小时,对此帖子的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

我发现了问题的来源:

在代码中间,我将所有高度的值乘以0.01,这使得在打印出表格时它移动了两个小数点。

我制作的解决方法是将其乘以100以获得原始高度(cm)。

谢谢@someprogrammerdude的建议!