首页 > 解决方案 > 使用逻辑运算符比较多个字符串在 C 编程中不能正常工作

问题描述

我正在尝试检查用户字符串输入(在小写用户输入之后)是否与所需的三个字符串匹配,rockpaperscissor。如果不符合要求,系统将打印It is a wrong input。否则,我会做点什么。

当我只给一张没有逻辑 || 的支票时 运算符,它工作正常,即将用户输入字符串与所需字符串进行比较。但是当我使用逻辑运算符时,它不能正常工作,即如果我给出正确的关键字,那就是说这是一个错误的输入。

作为初学者,我在 StackOverflow 中搜索后也无法弄清楚可能的原因。提前任何帮助。谢谢

#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]);
    }
    if ((strcmp(game, "rock") == 1) || (strcmp(game, "paper") == 1) || (strcmp(game, "scissor") == 1))
    {
        printf("You entered a wrong input\n");
    }
    else
    {
        /* Doing Something */
    }
    
}

标签: cif-statementlogical-operatorsc-stringsstrcmp

解决方案


阅读友好手册:man strcmp

如果 s1(或其前 n 个字节)分别小于、匹配或大于 s2,则 strcmp() 和 strncmp() 函数返回一个小于、等于或大于零的整数.

也就是说,如果字符串匹配,则strcmp返回 0。

因此,为了检查某些内容是否匹配,De Friendly Morgan 说我们应该这样做
a!=0 AND b!=0 AND ...


推荐阅读