0

我刚开始学习 c++,我写了一个代码来找到 int 值的最小值,现在我必须用双精度数来做,我错了!请让我知道如何解决它!

#include <iostream>

using namespace std;


void findminval (double num1, double num2) {
double minval;
if (num1<num2){
    minval=num1;
} else {
    minval=num2;
}

}
void findminval (int num1, int num2) {
int minval;
if (num1<num2){
    minval=num1;
} else {
    minval=num2;
}

}

int main(int argc, char** argv) {
int num1,num2;
    cout<<"Enter Two Numbers"<<endl;
    cin>>num1>>num2;
    int minimumvalue = findminval(int num1,int num2);
    cout<<minimumvalue<<endl;

double num1,num2;
    cout<<"Enter Two Numbers"<<endl;
    cin>>num1>>num2;
    double minimumvalue = findminval(num1,num2);
    cout<<minimumvalue<<endl;
return 0;
}
4

1 回答 1

1

您的函数缺少显式return值(您也不能在同一范围内更改变量的类型,因此当它到达时您的编译器会抱怨double num1,num2;)。

作为最低限度你需要写

double findminval(double num1, double num2){
    double minval;
    if (num1 < num2){
        minval = num1;
    } else {
        minval = num2;
    }
    return minval;
}

尽管您可能会以更难调试为代价进行简化,

double findminval(double num1, double num2){
    if (num1 < num2){
        return num1;
    } else {
        return num2;
    }
}

甚至

double findminval (double num1, double num2){
    return num1 < num2 ? num1 : num2;
}

请注意,您可以将其模板化,因此您不需要两个函数:

template<typename Y> Y findminval(const Y& num1, const Y& num2){
    return num1 < num2 ? num1 : num2;
}

请注意,我现在通过const引用传递以避免可能的值副本。现在你看我们是偶然发现的std::min。最后一点要考虑:“礼节”是在参数相等的情况下返回第一个参数。这是为了保留浮点的有符号零,甚至是 1 的补码系统中的整数类型。所以这可能是最好的事情,除了使用std::min

template<typename Y> Y findminval(const Y& num1, const Y& num2){
    return num1 <= num2 ? num1 : num2;
}
于 2019-02-05T17:03:20.440 回答