【问题标题】:C++ Control reaches end of non-void functionC++ 控件到达非 void 函数的末尾
【发布时间】:2020-08-21 12:52:00
【问题描述】:

我正在尝试创建一个函数,该函数将接收用户的输入并创建一个倒三角形。但是,我在函数末尾(第 29 行)收到一个错误,指出“控制到达非 void 函数的末尾。”

我认为这与返回值有关,但我不确定。此外,当我将函数内的int number 更改为int num 时,我收到一条错误消息,提示“重新定义'num'。”

请帮忙。解释发生了什么错误以及如何修复它。

谢谢。

#include <iostream>

using namespace std;

int row(int num)
{
    int number;
    int decreasedNumber;
    
    for(int i = number; i >= 0; i -= 2)
    {
        decreasedNumber = i;
        
        //decreased number from the outer loop will decrease once again
        for(int j = decreasedNumber; decreasedNumber >= 0; decreasedNumber -=2)
        {
            cout << decreasedNumber << " ";
        }
        cout << endl;
    }
}

int main()
{
    
    //Prompting the user to enter a number and collect that input
    cout << "Enter a number: " << endl;
    cin >> number;
    
    cout << row(number);
   
    return 0;
}

【问题讨论】:

  • 函数row中的return在哪里,其签名表明它返回int,预计在cout &lt;&lt; row(number);中?
  • number in row() 未初始化使用,num 从未使用过。
  • for(int j = decreasedNumber; decreasedNumber &gt;= 0; decreasedNumber -=2)变量j没有被使用,你确定这是你想要的吗?
  • 虽然这是一个非常基本的问题,它表明您缺乏语言的基本知识,您绝对应该通过阅读 good book 来解决这个问题,但我必须赞扬您的答案的良好整体结构,包括 propper代码缩进,这是我看到的比我想要的要少的东西。
  • 不过,我必须说,最好解释一下您想通过该程序实现的目标,这可能会为您提供更好的答案。

标签: c++ function


【解决方案1】:

返回void 以外类型的任何函数必须从所有控制流路径上的函数返回值。否则,程序会调用未定义的行为。

由于您的函数具有int 返回类型,您必须从该函数返回一个可转换为int 的值:

int row(int num) {
  // ...
  return 42;  // for example
}

此外,您没有在函数内部使用参数num,而是使用未初始化的number。您可能打算使用num 而不是number

【讨论】:

  • 我在 for 循环之后添加了 return 0,但我知道我的循环不起作用。我知道循环有效,因为它在之前的代码中是成功的。
  • 你之前的代码有 UB,所以如果它有效,那是个意外。代码现在以什么方式不起作用?请用明确的细节更新您的问题。
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2012-11-12
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多