C:从函数返回一个字符串?

Eli*_*oli 3 c string return function

所以我有这个函数,取1-13的值并返回一个字符串.

const char *valueName(const int valueNum)
{
    switch (valueNum) {
    case 1: return  "Ace";
    case 2: return  "Two";
    case 3: return  "Three";
    case 4: return  "Four";
    case 5: return  "Five";
    case 6: return  "Six";
    case 7: return  "Seven";
    case 8: return  "Eight";
    case 9: return  "Nine";
    case 10: return  "Ten";
    case 11: return  "Jack";
    case 12: return  "Queen";
    case 13: return  "King";
    }

    return "(invalid suit)";
}
Run Code Online (Sandbox Code Playgroud)

这个函数没有任何问题,但我的老师说多个return语句是不好的做法所以我应该使用开关将字符串分配给变量并返回它.但是我似乎无法弄清楚如何做到这一点.我需要使用指针吗?据我的老师说,这应该是一个简单的解决方案,但无论我尝试它不会工作.

提前致谢!

PS不要求分数或其他什么,但请不要仅仅因为它对你来说是显而易见的; 我还是个初学者.

Jea*_*nès 8

您可以简单地使用字符串数组:

const char *valueName(int valueNum) {
  static const char * const names[] = { "(bad)", "Ace", "Two", ...};
  if (valueNum<1 || valueNum>13) valueNum=0;
  return names[valueNum];
}
Run Code Online (Sandbox Code Playgroud)

如果你真的想要一个const int参数,那么:

const char *valueName(const int valueNum) {
  static const char * const names[] = { "(bad)", "Ace", "Two", ...};
  return names[(valueNum<1 || valueNum>13)? 0 : valueNum];
}
Run Code Online (Sandbox Code Playgroud)


Bat*_*eba 5

在我看来很好.(但是对于nitpick,请注意你并没有真正返回一个字符串,而是一个const指向空终止的只读数组的char第一个元素的指针.)

由于您不需要break语句,因此也很清楚.

但有些人喜欢return每个功能只有一个可以帮助调试.如果您需要使用变量,请使用以下内容:

const char *valueName(const int valueNum)
{
    const char* foo;
    switch (valueNum) {
    case 1: 
        foo = "Ace";
        break;
    ...
    default:
        foo = "(invalid suit)";
        break;
    }
    return foo;
}
Run Code Online (Sandbox Code Playgroud)

请注意,指针将指向只读内存.不要试图修改其内容.

继续,你可以使用一个字符串文字数组,并返回一个元素.但要注意任何索引都在这样一个数组的范围内:

const char *valueName(const int valueNum)
{
    static char* names[] = {"(invalid suit)", "Ace", ...};
    return names[(valueNum < 0 || valueNum > 13) ? 0 : valueNum];
}
Run Code Online (Sandbox Code Playgroud)