我对C ++还是很陌生,只是在玩if语句,所以我编写了这个程序:
#include <iostream>
using namespace std;
int getMax(int num1, int num2){
if (num1>num2)
{
cout << num1 <<endl;
}else{
cout << num2 <<endl;
}
return EXIT_SUCCESS;
}
int main(){
cout<<getMax(7,13)<<endl;
return 0;
}
我的getMax函数需要两个参数,并且应该输出2个数字中的较大者-在这种情况下为13。但是,不仅输出13,还输出0。为什么会这样?
答案 0 :(得分:8)
但是不仅输出13,还输出0。为什么会这样?
因为此语句:
cout<<getMax(7,13)<<endl;
您将cout
调用的结果发送到getMax()
,该调用是EXIT_SUCCESS
宏,其值为0。
看起来您的getMax()
函数应该返回最大值而不是打印它:
int getMax(int num1, int num2)
{
return num1 > num2 ? num1 : num2;
}
但是您应该改用std::max()
,或者至少将函数重命名为printMax()
答案 1 :(得分:2)
它也输出0。为什么会这样?
因为您告诉它:
cout << getMax(7,13) << endl;
这会将getMax
的返回值打印到标准输出(并刷新)。返回值为EXIT_SUCCESS
,该值为零。如果您不想打印返回值,只需将函数调用为
getMax(7, 13);
或更改其实现,以便返回更大的值,而不是打印出来(这就是函数名所建议的!)。
答案 2 :(得分:0)
lubgr和Slava已经解释了为什么程序输出0的原因,我只是想补充一点,这样做是更好的编程风格:
#include <iostream>
using namespace std; //this is considered bad practice, it is better to use std::cout etc.
int getMax(int num1, int num2) {
if (num1 > num2){
return num1; //this makes the return 0 unnecessary
}
else if (num1 < num2) {
return num2; //this makes the return 0 unnecessary
}
else {
return num1; //case num1 == num2, it doesn't matter which num you return
}
int main () {
cout << getMax (7, 13) >> '\n';
return 0;
}
我建议不要使用不必要的return语句(但通常不建议使用return语句,因为它们比直接输出要好),因为它们会导致非常随机的错误,很难捕获。或者,您可以使用不返回任何内容的void
函数,这仅在使用该函数输出内容时被认为是惯例:
#include <iostream>
void getMax(int num1, int num2) {
if (num1 > num2){
std::cout << num1 << '\n';
}
else if (num1 < num2) {
std::cout << num2 << '\n';
}
}
int main () {
getMax (7, 13);
return 0;
}
正如Guillaume在评论中提到的那样,通常最好使用return
语句而不使用函数直接输出,因此在这种情况下,第一种解决方案更好。
如有任何疑问,请随时提问。