【问题标题】:Issue with `int` vs. `double` - why isn't my program working?`int` 与 `double` 的问题 - 为什么我的程序不工作?
【发布时间】:2013-06-03 23:15:15
【问题描述】:

在使用 MATLAB 2 年多之后,我刚刚开始自学 C++,并且想要一些更强大的东西。我目前正在使用带有 MinGW 的 code::blocks 我正在尝试使用 intdouble,但由于某种原因,我的小测试程序无法运行。

该程序是我练习使用函数的一种方式。该程序从用户那里获取数字,并在插入负数时停止。然后,它会输出输入数字的总和、输入数字的乘积以及已处理数字的计数。

当我只使用 int 时,程序会按预期运行,但无法处理向其抛出的任何“十进制”数字 - 太糟糕了。

#include <cstdio>
#include <iostream>
#include <cstdlib>

using namespace std;

int X;
int sum;
int product;

int SUM()
{
    int A = sum+X;
    sum = A;
}

int PRODUCT()
{
    int B=product*X;
    product = B;
}

int main()
{
    cout<<"Welcome to my counting program! "<<endl;
    sum = 0;
    product = 1;
    int counter = 0;

    for (;;)
    {
        cout<<"Give me a number: ";
        cin>>X;
        if (X<0)
        {
            break;
        }
        sum = SUM();
        product = PRODUCT();
        counter = counter+1;
    }

    cout<<"SUM: ";
    cout<< sum <<endl;
    cout<<"PRODUCT: ";
    cout<< product <<endl;
    cout<<"NUMBERS INPUT: ";
    cout<< counter <<endl;

    system ("PAUSE");
}

但是,当我在适用的情况下使用 double 时,程序只会给我的乘积和总和为零。

#include <cstdio>
#include <iostream>
#include <cstdlib>

using namespace std;

double X;
double sum;
double product;

int SUM()
{
    double A = sum+X;
    sum = A;
}

int PRODUCT()
{
    double B=product*X;
    product = B;
}

int main()
{
    cout<<"Welcome to my counting program! "<<endl;
    sum = 0.0;
    product = 1.0;
    double counter = 0.0;

    for (;;)
    {
        cout<<"Give me a number: ";
        cin>>X;
        if (X<0)
        {
            break;
        }
        sum = SUM();
        product = PRODUCT();
        counter = counter+1;
    }

    cout<<"SUM: ";
    cout<< sum <<endl;
    cout<<"PRODUCT: ";
    cout<< product <<endl;
    cout<<"NUMBERS INPUT: ";
    cout<< counter <<endl;

    system ("PAUSE");
}

我做错了什么?我需要进行哪些更改才能使其正常工作?

另外,我认为我错误地调用了我的函数并试图在它们之间错误地传递值 - 这样做的正确方法是什么?

【问题讨论】:

    标签: c++ int double mingw codeblocks


    【解决方案1】:

    您仍在从您的函数中返回 int。此外,由于您正在分配结果,因此您需要返回一个适当的值 (sum = SUM();)。

    尝试以下更改:

    double /*int*/ SUM()
    {
        double A = sum+X;
        sum = A;
        return sum; // Return a value!
    }
    
    double /*int*/ PRODUCT()
    {
        double B=product*X;
        product = B;
        return product; // Return a value!
    }
    

    我还建议避免使用 sum/product/X 的全局变量,而是将它们声明为函数的本地变量,并将它们作为参数传递给您的方法。

    【讨论】:

    • 非常感谢!该修复工作!但是,我仍在思考您所说的“避免 sum/product/X 的全局变量,而是将它们声明为函数的本地变量,并将它们作为参数传递给您的方法”。就我的程序而言,我应该如何做到这一点?
    • @SergeantLuno 让你的方法像:double Sum(double a, double b),然后传入“sum”和“X”,并返回总和,设置为总和。这使您可以完全摆脱全局变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多