【问题标题】:Switch/String in cc中的开关/字符串
【发布时间】:2015-10-22 21:48:36
【问题描述】:

我试图让这个函数返回一个字符串。

char * vergleich(int random) {
    char *erg;
    switch(random) {
        case 1: erg = "Siccor" ; break;
        case 2: erg = "Paper" ; break;
        case 3: erg = "Rock"  ; break;
        case 4: erg = "Lizard" ; break;
        case 5: erg = "Spock" ; break;
        default: break;
            return erg;
    }
}

int main() {
    srand(time(NULL));

    int p1 = rand() % 4;
    int p2 = rand() % 4;

    printf("player1 shows %s\n", vergleich(p1));
    printf("\n\tif Player 2 plays %s or %s Player1 wins\n", vergleich(p1+1), vergleich(p1+3));
    if(p2 == p1 + 1 || p2 == p1 +3) {
        printf("player1 wins");
    }else {printf("player2 wins");}
        return 0;
    }
}

我认为函数的初始化是错误的,但我真的不知道如何处理字符串,请帮助。

如果我运行程序,它只会在case > 2 时崩溃。并且字符串显示不正确。

【问题讨论】:

  • rand() % 4 将产生可能的值 0、1、2 和 3。
  • 没有专门解决您的问题,但 p1p2 永远不会是 4 或 5 并且可能是 0。我想您可能想要 p1 = rand() % 5 + 1 这将创建一个随机数0-4,然后添加一个,所以现在范围是 1-5,它看起来就是你想要的
  • default 案例中的break 之后,您似乎有语法错误。 return 不合适。
  • 你的编译器想对你大喊大叫!启用编译器警告并注意它们!
  • 好的,谢谢。返回是坏小子..

标签: c string switch-statement


【解决方案1】:

崩溃的发生是因为函数vergleich() 可以使用参数0(当p10)和6p13 时调用。开关中不处理零和六,因此指针erg 指向垃圾。

所以,我建议从04 枚举您的项目。为避免加法时溢出,您还应该使用模运算%,例如(p1 + 3) % 5(p1 + 1) % 5

要生成从04 的随机数,您可以使用rand() % 5;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多