我试图让这个函数返回一个字符串。
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
时崩溃。并且字符串没有正确显示。
答案 0 :(得分:1)
您也可以直接返回字符串文字:
const char * vergleich(int random) {
switch(random) {
case 1: return "Siccor";
case 2: return "Paper";
case 3: return "Rock";
case 4: return "Lizard";
case 5: return "Spock";
default: break;
}
return "";
}
确实rand() % 4
将返回0,1,2,3 - 你应该考虑它并适应你的需要。
同样在你的default
案例中你会返回一个未初始化的指针,它会触发未定义的行为,这在我的解决方案中可以避免,如你所见。
答案 1 :(得分:1)
崩溃发生,因为函数vergleich()
可以使用参数0
(p1
为0
时)和6
p1
时调用是3
。在交换机中不处理零和六,因此指针erg
指向垃圾。
因此,我建议您枚举从0
到4
的商品。为了避免在添加过程中出现溢出,您还应该使用模运算%
,例如(p1 + 3) % 5
,(p1 + 1) % 5
。
要从0
生成随机4
,您可以使用rand() % 5;
。