为什么代码不能返回正确的值?

Why the code can't return right value?

本文关键字:代码 不能 返回 为什么      更新时间:2023-10-16

刚开始学习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;
}

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;
}

只是为了好玩,也为了教育。如果你想在C++中模拟声明式编程,定义变量之间的关系并在之后"获取更新的值",你可以使用 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以确保它不会进行整数除法,这是您代码中的另一个错误。

把 "float M=..."cin>>CM;"行之后的行。现在您正在尝试在输入厘米数之前计算米数,因此结果当然是随机的。

因为 CM 仅在用户有机会初始化之前在公式中声明和使用。

当前的程序流程是这样的:

  1. CM 被声明
  2. M 是使用 CM 值计算的(无论此时是什么(
  3. 用户输入 CM 的值
  4. 用户看到转换的结果(M 的值(,但它已经计算出来,用户输入实际上并没有 使用。

要修复程序,请在用户输入后移动计算:

cout << "Enter the height in CM: ";
cin >> CM;
float M = CM / CM2M + (CM % CM2M) * 0.01f;
cout << "Your in M is " << M << endl;