You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中使用||逻辑运算符比较多个字符串无法正常运行怎么解决?

问题原因

你当前代码的逻辑运算符使用错误,核心问题出在if判断的条件逻辑上:
你写的判断条件是:

if ((strcmp("rock", game) != 0) || (strcmp("paper", game) != 0) || (strcmp("scissor", game) != 0))

这个条件的含义是只要输入不等于三个字符串中的任意一个,就判定为输入错误,而这个条件本身是恒成立的:

  • 假设用户输入正确的rock,那它必然不等于paper和scissor,因此(strcmp("paper", game) != 0)和(strcmp("scissor", game) != 0)都为真,逻辑或||只要有一个条件为真整个表达式就为真,因此会进入错误分支。
  • 输入paper或者scissor同理,必然满足和另外两个字符串不等的条件,最终都会触发错误提示。

修正方案

有两种符合需求的写法,你可以二选一:

方案1:修改逻辑运算符为&&

把原条件的逻辑或||替换为逻辑与&&,含义改为只有输入同时不等于三个字符串时,才判定为输入错误,符合你的需求:

if ((strcmp("rock", game) != 0) && (strcmp("paper", game) != 0) && (strcmp("scissor", game) != 0))
{
    printf("You entered a wrong input\n");
}
else
{
    /* 后续正常逻辑 */
}

方案2:正向判断合法输入

对初学者更直观的写法:先判断输入是否属于三个合法值中的任意一个,是就走正常逻辑,否则报错:

if (strcmp("rock", game) == 0 || strcmp("paper", game) == 0 || strcmp("scissor", game) == 0)
{
    /* 后续正常逻辑 */
}
else
{
    printf("You entered a wrong input\n");
}

额外注意点

你代码里scanf("%s", &game);的写法不规范,数组名game本身就代表数组首地址,不需要加取地址符&,修改为scanf("%s", game);即可。

完整修正代码

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main()
{
    char game[40];
    printf("Enter one among rock, paper and scissor: ");
    scanf("%s", game);
    for (int i = 0; game[i]; i++)
    {
        game[i] = tolower(game[i]);
    }
    // 这里用了方案2的正向判断,你也可以换成方案1的写法
    if (strcmp("rock", game) == 0 || strcmp("paper", game) == 0 || strcmp("scissor", game) == 0)
    {
        /* Do Something */
    }
    else
    {
        printf("You entered a wrong input\n");
    }
    
    return 0;
}

内容的提问来源于stack exchange,提问作者Adrija Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:36:03