我刚开始学习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;
}
你的功能缺少明确的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;
}
请注意,然后,你可以templatise这个,所以你不需要两个功能:
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;
}