为什么代码无法返回正确的值?

时间:2018-05-08 08:15:18

标签: c++

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

4 个答案:

答案 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只是在用户有机会初始化之前在方程中声明和使用。

目前的计划流程如下:

  1. 宣布CM
  2. M是使用CM值计算的(无论此时是什么)
  3. 用户输入CM
  4. 的值
  5. 用户会看到转换的结果(M的值),但是已经计算出来并且用户输入实际上并非如此 使用。
  6. 要修复程序,请在用户输入后移动计算:

    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以确保它不进行整数除法,这是代码中的另一个错误。