我正在制作一个石头刀布游戏。(石头剪刀布)在这个作业中,我们被要求使用数字来进行比较。因此需要将用户输入 'S' 或 'K' 或 'P' 转换为 0 , 1 ,2 repectively。我在使用 strcmp 函数时遇到了麻烦,由于我对指针和字符的理解有限,该函数似乎不起作用。
int comp_number,user_number;
char user_guess[1], computer_guess[1];
printf("Please enter S (for stone) or K (for Knife) or P (for Paper).\n");
scanf("%c",&user_guess);
comp_number = rand() % 3;
/*
o = stone
1 = kinfe
2 = paper
*/
if(strcmp(user_guess,"S")==0 || strcmp(user_guess,"s")==0){
user_number=0;
}else if(strcmp(user_guess,"K")==0 || strcmp(user_guess,"k")==0){
user_number=1;
}else{
user_number=2;
}
最佳答案
一种更简单的读取和逻辑方法(看起来更好)是扫描到一个字符然后执行 switch 语句:
scanf("%c",&user_guess);
switch (user_guess) {
case 'S':
case 's':
user_number=0;
break;
case 'K':
case 'k':
user_number=1;
break;
case 'P':
case 'p':
user_number=2;
break;
default:
// You can even do some error handling in here!
}
下面@alk的建议,你也可以去掉一些行,使用tolower
或toupper
来转换大小写,那么你只需要处理一个字母的大小写每封信。
关于比较C中的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638703/