我已经为一个奇怪的骰子游戏写了一个程序,假设在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中不是有效的字符串比较-您应该使用标准库函数进行字符串比较strcmp
instead1。
否则,将userGuess
设为单个char
变量而不是char数组,并使用单个字符(单引号)进行比较,例如
userGuess == 'h'
一
现在,比较可以编译,但如果您打开gcc
userGuess == "h"
编译器标志,则会发出警告,例如:warning: comparison with string literal results in unspecified behavior [-Waddress]
这意味着(正如Jonathan Leffler在下面的评论中提到的那样),您不是在比较字符串本身,而是比较两个指针(
-Wall
和userGuess
指向同一个位置),这是有效的,但通常没有意义。