麻烦简单的功能

时间:2015-10-08 16:26:42

标签: c++ function output

我正在编写代码来调用与力,质量和加速度方程有关的函数。这些函数被正确调用,但输入不应该成倍增加。我的第一个函数的输出是一个疯狂的小数字,第一个函数的输出总是0。 这是我的代码。任何反馈都会非常有帮助。感谢。

#include <iostream>
#include <cstdlib>

using namespace std;

void displayMenu();
double force(double);
double secondForce(double,double);

int main(int argc, char** argv) 
{
    int menuOption;
    displayMenu();
    system("PAUSE");
    return 0;
}

void displayMenu(void)
{
    int menuOption;
    double weight, accel;
    cout << "           Main Menu" << endl;
    cout << "Enter 1 for Force calculation with acceleration = 9.8m/s^2.\n";
    cout << "Enter 2 for Force calculation with user defined acceleration.\n";
    cout << "Enter 3 to quit the program.\n";
    cin >> menuOption;
        if(menuOption==1)
        {
            cout << "Enter a mass.\n";
            cin >> weight;
            cout << "The force is ";
            cout << force(weight);  
            cout << "N.";
            }
        else if(menuOption==2){
            cout << "Enter a mass.\n";
            cin >> weight;
            cout << "Enter an acceleration.\n";
            cin >> accel;
            cout << "The force is ";
            cout << secondForce(weight, accel);
            cout << "N.";
        }
}

double force(double weight)
{
    double force, mass;
    force=(mass*(9.8));
    return force;
}

double secondForce(double secondMass, double secondWeight)
{
    double secondForce, mass, acceleration;
    secondForce=(mass*acceleration);
    return secondForce;

}

4 个答案:

答案 0 :(得分:2)

您在函数中使用未初始化的变量。在程序中使用这些未初始化的变量是undefined behavior

force=(mass*(9.8)); << mass has a garbage value
secondForce=(mass*acceleration); << mass and acceleration have a garbage value

我认为你的意思是

double force(double weight)
{
    return weight * 9.8;
}

double secondForce(double secondMass, double secondAccel)
{
   return secondMAss * secondAccel;
}

答案 1 :(得分:1)

问题是您在计算中使用未定义的变量。请参阅下面的嵌入式评论:

double secondForce(double secondMass, double secondWeight)
{
    double secondForce, mass, acceleration;
    secondForce=(mass*acceleration); //what is the value of mass and acceleration here??
    return secondForce;
}

作为旁注:考虑单步执行调试器(如gdb)中的代码,以便查看程序的执行方式。对于大型程序来说,试图通过它进行推理是非常困难的。在您的示例中,很容易找到有经验的程序员。

答案 2 :(得分:0)

您将数据乘以垃圾值

double force(double weight)
{
double force, mass;
force=(mass*(9.8));
return force;
}

double secondForce(double secondMass, double secondWeight)
{
double secondForce, mass, acceleration;
secondForce=(mass*acceleration);
return secondForce;
}

此处massacceleration的价值是多少?这些变量未初始化。您必须先为它们分配一些值。

答案 3 :(得分:0)

您应该启用编译器警告并注意它们。例如,即使在最低警告级别,MSVC也会这样说:

warning C4700: uninitialized local variable 'mass' used
warning C4700: uninitialized local variable 'mass' used
warning C4700: uninitialized local variable 'acceleration' used

在C ++中,使用未初始化的变量绝不是一个好主意。与其他语言不同,C ++中的大多数变量都是 not 自动初始化为0的值。这将导致程序在访问变量中包含的值时禁止未指定或未定义的行为。

安全无误。 初始化!例如:

double force = 0.0;
double mass = 0.0;

请注意,该语言还允许您首先初始化,然后分配,然后使用该变量。例如:

double force;
force = 0.0;
cout << force;

但那是不好的风格。为什么要保留一个未初始化的变量,然后在一步完成所有事情后分配一些东西?首先保留变量未初始化也会阻止您进行const

确保所有变量的正确初始化将使您的程序行为定义和一致。但是,你会遇到其他问题,因为你将0 mass乘以,它总是会导致0并且肯定不是你想要的。但是,确定性行为是修复错误数学的良好起点。