IF-ELSEの部分にバグがあると思われる奇妙なサイコロゲームのプログラムを書いています。問題を再現する作業用のコードスニペットを貼り付けています。この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ヘルプ - もいくつかの情報:コード::ブロック
コンパイラ:GCC
OS:Linuxの
*シングル*文字なので、*一重引用符**を使用して比較を有効にすることをお勧めします。 (例:文字列比較の代わりに文字比較にする) –
@ DavidC.Rankin yeah that fair point – artm
これは公正な編集です。 'userGuess == 'h''のように、 'userGuess'も文字でなければならないことを理解するために' char userGuess = '1'; ' ':)' –