刚开始学习C ++,下面的代码无法返回正确的值。我找不到哪里有问题,需要一些帮助,谢谢!
const int CM2M = 100;
int main()
{
using namespace std;
int CM;
float M = CM / CM2M + (CM % CM2M) * 0.01f;
cout << "Enter the height in CM: ";
cin >> CM;
cout << "Your in M is " << M << endl;
return 0;
}
答案 0 :(得分:3)
cin操作是在您检索值时: 你需要在任何过程之前得到它:
const int CM2M = 100;
int main()
{
using namespace std;
int CM;
cout << "Enter the height in CM: ";
cin >> CM;
float M = CM / CM2M + (CM % CM2M) * 0.01f;
cout << "Your in M is " << M << endl;
return 0;
}
答案 1 :(得分:0)
在“cin&gt;&gt; CM”之后加上“float M = ...”行;线。现在你试图计算甚至输入厘米数之前的米数,所以结果当然是随机的。
答案 2 :(得分:0)
因为CM只是在用户有机会初始化之前在方程中声明和使用。
目前的计划流程如下:
要修复程序,请在用户输入后移动计算:
cout << "Enter the height in CM: ";
cin >> CM;
float M = CM / CM2M + (CM % CM2M) * 0.01f;
cout << "Your in M is " << M << endl;
答案 3 :(得分:0)
只是为了它的乐趣,以及教育的缘故。如果你想用C ++模拟声明性编程,要定义变量和&#34之间的关系;得到更新的值&#34;之后,你可以使用lambda。
const int CM2M = 100;
int main()
{
using namespace std;
int CM;
auto M = [&] { return 1.0f * CM / CM2M + (CM % CM2M) * 0.01f; };
cout << "Enter the height in CM: ";
cin >> CM;
cout << "Your in M is " << M() << endl;
return 0;
}
它真的是在作弊,因为M()
会调用lambda,因此确保算术在值已知之后完成。以正确的顺序编写操作更加清晰。 C ++还允许您在第一个使用点声明变量,因此您不需要提前声明所有变量,您可以在需要声明之前执行代码。所以你要做这样的事情:
const int CM2M = 100;
int main()
{
using namespace std;
int CM;
cout << "Enter the height in CM: ";
cin >> CM;
float M = 1.0f * CM / CM2M + (CM % CM2M) * 0.01f;
cout << "Your in M is " << M << endl;
return 0;
}
我添加了人工1.0f
以确保它不进行整数除法,这是代码中的另一个错误。