比较C中的多个字符

时间:2016-11-16 17:38:36

标签: c string char

我正在制作石刀纸游戏。( 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;
    }

5 个答案:

答案 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所建议的那样,您也可以使用tolowertoupper来转换案例来删除某些行,然后您只需要处理每个字母的一个字母大小写。

答案 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