我已经为一个奇怪的骰子游戏写了一个程序,假设在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;
}

预期产量:“你赢了:D”|实际产量:“你输了D:”
我认为这是条件的问题。所以,我将条件改为(userGuess == 'h' && rollTotal2 > rollTotal)等等(我将双反逗号改为单反逗号)。这给了我同样的输出和warning: comparison between pointer and integer。这让我产生了一种困惑,因为我不知道这些功能,所以我什么也做不到。
这使我回到我的程序的当前状态,即上面粘贴的状态(我返回到双反逗号)。我仍然相信,如果-其他的条件是马车。它仍然会给我同样的错误输出以及Warning: comparison with string literals results in unspecified behaviour。这让我又找到了一个SO Q&A
这个错误可能是由于我缺乏指针之类的知识,而且很可能是非常愚蠢的。请帮帮我。
一些可能有帮助的信息-
IDE:代码::块
编译器:GCC
操作系统:Linux

最佳答案

userGuess == "h"(和userGuess == "e"
您可以使用运算符==比较字符串文本,这在C中不是有效的字符串比较-您应该使用标准库函数进行字符串比较strcmpinstead1。
否则,将userGuess设为单个char变量而不是char数组,并使用单个字符(单引号)进行比较,例如

userGuess == 'h'


现在,比较可以编译,但如果您打开gccuserGuess == "h"编译器标志,则会发出警告,例如:
warning: comparison with string literal results in unspecified behavior [-Waddress]

这意味着(正如Jonathan Leffler在下面的评论中提到的那样),您不是在比较字符串本身,而是比较两个指针(-WalluserGuess指向同一个位置),这是有效的,但通常没有意义。

09-28 03:30