【问题标题】:warning: control may reach end of non-void function problem警告:控制可能到达非空函数问题的结尾
【发布时间】:2021-04-07 14:46:08
【问题描述】:

嗯,我做了 RGB 到十六进制的转换。我在在线编译器中的程序运行良好,但在 codewars 上它有一个问题“控制可能到达非 void 函数的末尾”。我应该怎么办?我应该删除for 循环吗?

using namespace std;
#include <iostream>
#include <string>

int checkForNumber(int input) {
    if (input > 255) return 255;
    if (input < 0) return 0;
    else return input;
}
string check(int input) {
    if (input < 10) return to_string(input);

    switch (input)
    {
    case 10:
        return "A";
        break;
    case 11:
        return "B";
        break;
    case 12:
        return "C";
        break;
    case 13:
        return "D";
        break;
    case 14:
        return "E";
        break;
    case 15:
        return "F";
        break;
    }
}
**string YES(int input) {
    string m;
    char temp;
     for (int i = 0; i < 2; i++) {
        m += check(input % 16);
        input /= 16;**
//problem is somewhere here
    }
    temp = m[0];
    m[0] = m[1];
    m[1] = temp;
    return m;
}
int main()
{
    string output;
    ios_base::sync_with_stdio(false);
    int r = 148 , g = 0, b = 211;
    r = checkForNumber(r);
    g = checkForNumber(g);
    b = checkForNumber(b);
    
   output += YES(r) + YES(g) + YES(b);
   cout << output;
    
}

【问题讨论】:

  • 问题不在于YES,而在于check。如果input 大于 15,编译器会警告您不返回任何内容。
  • 一个不相关的注释:这些breaks 没有一个有目的。因为你return 在他们上面的那一行。
  • 检查结束前输入throw std::logic_error("should never happen");

标签: c++


【解决方案1】:

问题出在您的check(int input) 函数中——考虑一下如果input 参数的值不在[10, 15] 范围内会发生什么。我建议在 switch 块底部添加一个 default: 案例,以返回适当的内容。

【讨论】:

  • 好吧,input &lt; 10 的情况得到了处理,但是,input &gt; 15 是问题所在。
  • 嗯,我试试。谢谢
  • @LEXALEPEX 当​​你这样做时,请确保返回相同的适当值if(input &lt; 0)
猜你喜欢
  • 1970-01-01
  • 2016-08-13
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2012-10-24
相关资源
最近更新 更多