比较C中的多个字符

标签 c string char

我正在制作一个石头刀布游戏。(石头剪刀布)在这个作业中,我们被要求使用数字来进行比较。因此需要将用户输入 '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的建议,你也可以去掉一些行,使用tolowertoupper来转换大小写,那么你只需要处理一个字母的大小写每封信。

关于比较C中的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638703/

相关文章:

c++ - 如何在不使用魔数(Magic Number)的情况下将 "char number"转换为 int? (在 C++ 中)

c++ - 使用 C++ 计算两个日期的差异

c - 如何使函数 pow 支持负 float

java - 如何将arraylist转换为双引号中所有项目的字符串数组

python - Python 列表切片的空间复杂度

c++ - C++ 问题中的字符串转字符

c - C中的二维字符数组操作

c - 函数不在 c 中返回结果(在项目文件中)

c - 如何使用 fgets() 来避免转换它的第二个 int 类型的参数?

在 C 中将字符串转换为字符串数组