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

时间:2017-01-04 06:15:54

标签: 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;
}

预期输出:“你赢了: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一起给我相同的错误输出。这引出了另一个fruitless endeavor

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

可能会有所帮助的一些信息 -

IDE:Code :: Blocks

编译器:GCC

操作系统:Linux

3 个答案:

答案 0 :(得分:8)

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

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

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

userGuess == 'h'

1 就目前而言,比较userGuess == "h"会编译但是如果你打开gcc -Wall编译器标志会给你一个警告,例如:

warning: comparison with string literal results in unspecified behavior [-Waddress]

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

答案 1 :(得分:2)

请理解char数据类型的概念。如果您只想比较一个字符,请不要将变量声明为字符串并将其与字符进行比较。请在下面找到代码。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int rollTotal = 11;
int rollTotal2 = 10;
char userGuess = '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");
}
getchar();
return 0;
}

如果你想比较字符串,请使用strcmp()函数比较字符串并在代码中添加头文件#include。

答案 2 :(得分:0)

您正在将数组userGuess的地址与字符串的地址进行比较&#34; h&#34;和&#34; e&#34;。

对此的解释将使用

*userGuess == 'h'

Array的名称是此数组的地址,与指针相同。 &#39; H&#39;是一个文字字符然后是一个字符串。