这是我在stackoverflow中的第一篇文章。我目前正在重新学习C ++,而且我无法理解在这个系统中变量double userBase [j] .height的意外更改值过程中发生了什么。
现在,每次我想从5数组结构中打印出所有收集信息的表时,高度值突然改变,并移动了2个小数点。
我目前正在查明问题的来源。我怀疑它来自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;
}
}
我一直试图弄清楚这一个约一个小时,对此帖子的任何帮助将不胜感激!
答案 0 :(得分:3)
我发现了问题的来源:
在代码中间,我将所有高度的值乘以0.01,这使得在打印出表格时它移动了两个小数点。
我制作的解决方法是将其乘以100以获得原始高度(cm)。
谢谢@someprogrammerdude的建议!