我正在制作石刀纸游戏。( Rock Paper Scissors )在此作业中,我们被要求使用数字进行比较。因此需要将用户输入“ S ”或“ K ”或“ P ”转换为 0,1,2 强烈>分别。我使用 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;
}
答案 0 :(得分:1)
要么
char user_guess[2], ... /* C-"strings" are '0'-terminated,
that why you always need one more `char`. */
...
scanf("%1s", user_guess); /* Scan in ONLY 1 char! */
...
if (strcmp(user_guess, "S") == 0 || ...
或
char user_guess, ...
...
scanf("%c", &user_guess);
...
if (user_guess == 'S') || ... /* Mind the SINGLE quotes! */
答案 1 :(得分:1)
不要过于复杂化这么简单!
只需getActivity()
if(user_guess == 'S' || user_guess == 's')
这样做:
如果返回值< 0然后它表示str1小于str2。
如果返回值> 0然后它表示str2小于str1。
如果返回值= 0则表示str1等于str2。
所以它不适用于你想要的东西,而且对于这么简单的程序来说它太复杂了:)
答案 2 :(得分:1)
更简单的方法是执行读取和逻辑(看起来更好)是扫描到char然后执行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
来转换案例来删除某些行,然后您只需要处理每个字母的一个字母大小写。
答案 3 :(得分:1)
user_guess 和 computer_guess 不需要字符串。
int comp_number,user_number;
char user_guess, computer_guess;
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(user_guess == 'S' || user_guess == 's'){
user_number=0;
printf("You chose Stone\n");
}
else if(user_guess == 'K' || user_guess == 'k'){
user_number=1;
printf("You chose Knife\n");
}
else{
user_number=2;
printf("You chose Paper\n");
}
答案 4 :(得分:1)
也可以使用三元条件运算符来完成。
scanf(" %c",&user_guess);
int user_number = tolower(user_guess) == 's' ? 0
: tolower(user_guess) == 'k' ? 1
: tolower(user_guess) == 'p' ? 2
: -1; // for error handling