为什么我的程序在运行时仍输出“ 0”,即使它也不应该这样?

时间:2019-04-25 13:00:26

标签: c++ if-statement output

我对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。为什么会这样?

3 个答案:

答案 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语句而不使用函数直接输出,因此在这种情况下,第一种解决方案更好。

如有任何疑问,请随时提问。