【问题标题】:c++, control reaches end of non-void function [-Wreturn-type] [duplicate]c ++,控制到达非void函数的结尾[-Wreturn-type] [重复]
【发布时间】:2021-04-13 01:43:17
【问题描述】:

编译此代码时出现错误(控制到达非 void 函数 [-Wreturn-type] 的末尾): 如果字符串中没有间隙,它应该返回 true,如果有间隙,它应该返回 false。

bool isSafeBridge(string bridge){
    for (int i = 0; i < bridge.length(); i++)
    {
        if (bridge[i] == ' ')
        {
            return false;
        }
        else{
            return true;
        }
    }
}

int main(){
    cout<<isSafeBridge("####");
}

【问题讨论】:

  • 如果bridge.length()0 应该返回什么?
  • 我认为至少五个副本中的一个应该足以回答您的问题,以及您需要做什么来解决问题。

标签: c++


【解决方案1】:

如果字符串完全为空,for循环将永远不会运行,也不会发生return语句。

弄清楚你想要false还是true作为空字符串(可能是true,因为空字符串没有间隙),并在函数末尾返回。

【讨论】:

  • 如果不是return true;return false;,还有throw std::logic_error("there is no bridge");
【解决方案2】:

首先,isSafeBridge 不会做你想做的事。在每个迭代中,它返回falsetrue。这意味着,在第一次迭代中,如果字符不是空格,函数将返回true。这结束了函数调用。它不会继续检查其他字符。

如果当前字符是空格,则要返回false,因为有空格。如果字符不是空格,则要继续检查其他字符。只有在检查了所有个字符后,如果没有空格,您应该返回true

而且,虽然该函数在循环的每次迭代中也返回一个值,但它可能不返回一个值。如果传递一个长度为零的字符串,就会发生这种情况。然后没有循环的迭代,所以return false;return true; 都不会被执行。控制从循环流到函数的末尾,那里没有return 语句,这就是编译器抱怨的原因。

【讨论】:

    【解决方案3】:

    如果bridge.length() 为零会怎样?

    那是一座安全的桥梁,因为它没有缝隙吗?因为它不是一座桥,所以它不是一座安全的桥吗?

    编译器当然不知道这个问题的答案。

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多