【发布时间】: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++