我为一个奇怪的骰子游戏写了一个程序,假定在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
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"指向相同的位置) - 这是有效但通常没有意义.