【问题标题】:Why is my program is outputting '0' when run, even though it is not supposed too? [closed]为什么我的程序在运行时输出“0”,即使它不应该也是如此? [关闭]
【发布时间】:2019-04-25 13:00:25
【问题描述】:

我对 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 函数需要两个参数,并且应该输出两个数字中较大的一个 - 在本例中为 13。但它不仅输出 13,还输出 0。为什么会这样?

【问题讨论】:

  • getMax 不应该输出最大值,而是返回它。
  • 计算couts 的数量,如果它们在不同的分支中,请考虑这两个...如果不在屏幕上打印某些内容,您希望cout&lt;&lt;getMax(7,13)&lt;&lt;endl; 做什么?跨度>

标签: c++ if-statement output


【解决方案1】:

但是它不仅输出了 13,还输出了 0。为什么会这样?

因为在这句话中:

cout<<getMax(7,13)<<endl;

您将getMax() 调用的结果发送到cout,这是EXIT_SUCCESS 宏,其值为0。

看起来您的 getMax() 函数应该返回最大值而不是打印它:

int getMax(int num1, int num2)
{
     return num1 > num2 ? num1 : num2;
}

但您应该改用std::max(),或者至少将您的函数重命名为printMax()

【讨论】:

  • 我要问,为什么它不在getMax 中调用cout 呢?是不是因为输出流当前被int main 持有,所以它没有在方法中调用它?
  • @Frontear OP 的代码打印 13,0
  • @Frontear “为什么它不调用 getMax() 中的 cout 调用”它确实如此,并且 OP 抱怨 除了输出 13 之外还输出 0
  • 我完全错过了你的回答,没关系,对不起。我自己还在学习一点 C++
  • 不知道,但谢谢!
【解决方案2】:

它也输出 0。为什么会这样?

因为你告诉它:

cout << getMax(7,13) << endl;

这会将getMax 的返回值打印到标准输出(并刷新)它。返回值为EXIT_SUCCESS,为零。如果不想打印返回值,直接调用函数为

getMax(7, 13);

或更改其实现,以便返回更大的值,而不是打印出来(这就是函数名称所暗示的!)。

【讨论】:

    【解决方案3】:

    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 在 cmets 中提到的,通常最好使用 return 语句而不是使用函数直接输出,因此在这种情况下第一种解决方案更好。

    如有任何问题,请随时提出更多问题。

    【讨论】:

    • 我会添加一个 else 语句来处理 == 的情况。 C++ 的语法也是else if
    • 谢谢这有点好,我删除了downvote
    • @GuillaumeRacicot 抱歉,我已经习惯了 python 表示法,我更正了语法错误。我不太清楚您所说的“不是鼓励回报,而是在一个应该返回而不是输出的函数中输出。”。据我所知,void 函数不返回任何内容,答案中的 int 函数使用 return 语句。此外,我建议不要返回对程序/代码没有贡献 - 在这里甚至会阻碍 - 程序/代码,而不是一般的返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多