功能中返回值的数据类型不同?

时间:2012-02-18 23:24:55

标签: c++

好的,我在这里为学校制作的课程感到有些困惑。程序执行,我得到了我想要的结果,但我只是觉得有些事情会更好。在我的findLowest()函数中,它返回int。我在参数中传递给它的数据类型是double。具有一种返回类型的函数可以具有不同的数据类型参数吗?或者我会说有一种更简洁的方法来做到这一点,也许是铸造?我不会有问题,但找到calcAverage()调用最低的需求,这让我感到困惑,因为如果我改变数据成员显然不会传递给每个函数和从每个函数传递正确的数据。这是该程序的代码片段,感谢您提前提出的任何想法,如果需要它可以保持原样,它可以工作。

//function averages input test scores
void calcAverage(double score1, double score2, double score3, double score4, double score5)
{   
    //call to findLowest() function to decide which score to omit

        double lowest = findLowest(score1, score2, score3, score4, score5); 

        double average = ((score1 + score2 + score3 + score4 + score5) - lowest) / 4;

        cout << "Average is: " << average << endl;

}

//determines which input score is lowest 
int findLowest(double score1, double score2, double score3, double score4, double score5)
{

    double low = score1;    

    if(score2 < low)
        low = score2;
    if(score3 < low)
            low = score3;
    if(score4 < low)
        low = score4;
    if(score5 < low)
        low = score5;

    cout << "Lowest score is: " << low << endl;


return low;
}

3 个答案:

答案 0 :(得分:2)

为什么不将findLowest的返回类型更改为double?

答案 1 :(得分:2)

findLowest函数的正文中,您定义double low,但将其作为int返回,以便您可以再次将其分配给double

将此返回值的类型从int更改为double,一切都会正常。

&#34;具有一种返回类型的函数可以具有不同的数据类型参数吗?&#34;
当然可以。返回值的类型不一定与参数类型相关。

&#34;问题在于书中说明了使用函数int findLowest&#34; 的问题 也许这本书的作者希望你做这样的事情:

#include <limits>
#include <vector>
...
int findLowest(vector<double>& v)
{
    int lowest = -1;
    double lowestValue = numeric_limits<double>::max();
    for (int i = 0; i < v.size(); ++i)
    {
        if (v[i] < lowestValue)
        {
            lowestValue = v[i];
            lowest = i;
        }
    }
    cout << "Lowest score is: " << lowestValue << " at index: " << lowest << endl;
    return lowest;
}
...
    // in calcAverage:
    vector<double> args;
    args.resize(5);
    args[0] = score1; args[1] = score2; args[2] = score3; args[3] = score4; args[4] = score5;

    int lowest = findLowest(args);
    args[lowest] = 0;
    double average = (args[0] + args[1] + args[2] + args[3] + args[4]) / 4;

答案 2 :(得分:1)

当然可以。您可以传递foo个类型并返回bar类型。

在你的例子中,你需要知道一件事。将double的值分配给int类型时,会截断它们。所以你失去了精确度。如果您传入0.254,则可能会获得0。这可能不是被调用者所期望的。

我会更改findLowest以便它返回double,最好尽可能坚持正确的类型。

根据要求,更好的解决方案可能是返回int,表示五个数字中哪一个更低。因此,如果您致电findLowest(2.3, 4, 0, 9, 6),则会返回2. findLowest(1, 2, 3, 4, 5) = 0等。