这个IF-ELSE的条件有什么问题?

Rus*_*Rai 0 c if-statement

我为一个奇怪的骰子游戏写了一个程序,假定在IF-ELSE部分有错误的条件.我正在粘贴一个复制问题的工作代码片段.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int rollTotal = 11;
    int rollTotal2 = 10;
    char userGuess[5] = "l";

    if ((userGuess == "h" && rollTotal2 > rollTotal) || (userGuess == "e" && rollTotal2 == rollTotal) || (userGuess == "l" && rollTotal2 < rollTotal))
    {
        printf("You win :D \n");
    }
    else
    {
        printf("You lose D: \n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期输出:"你赢了:D"| 实际输出:"你输了D:"

我认为这是条件的问题.因此,我将条件更改为(userGuess == 'h' && rollTotal2 > rollTotal)等等(我将双引号逗号更改为单个引号).这给了我同样的输出warning: comparison between pointer and integer.这导致了一个令人困惑的SO Q&A,由于我不知道这些功能,我无法做出任何改变.

这导致我的程序的当前状态是上面粘贴的(我恢复为双引号).我仍然相信IF-ELSE的条件是错误的.它仍然给我同样的错误输出Warning: comparison with string literals results in unspecified behaviour.这导致我又一次毫无结果的努力.

这个错误可能是由于我对指针等知识缺乏而且很可能非常愚蠢.请帮帮我.

一些可能有帮助的信息 -

IDE:Code :: Blocks

编译:GCC

操作系统:Linux

art*_*rtm 8

userGuess == "h"(和userGuess == "e")

您使用运算符比较字符串文字==,这不是C中的有效字符串比较 - 您应该使用标准库函数进行字符串比较strcmp而不是1.

否则,将make userGuess作为单个char变量而不是char数组,并使用单个字符(单引号)进行比较,例如

userGuess == 'h'
Run Code Online (Sandbox Code Playgroud)

1 现在,比较userGuess == "h"编译,但如果你打开gcc -Wall编译器标志,应该给你一个警告,例如:

warning: comparison with string literal results in unspecified behavior [-Waddress]
Run Code Online (Sandbox Code Playgroud)

这意味着(正如Jonathan Leffler在下面的评论中所提到的),你不是在比较字符串本身,而是比较两个指针(userGuess"l"指向相同的位置) - 这是有效但通常没有意义.