我试图创建一个小型老虎机游戏,每个卷轴有三个卷轴和四个可能的符号(铃,橙,樱桃和马)。
我开始生成1-4之间的随机值,现在我试图让第一个卷轴打印出与生成的值相关联的文本。
以下是代码,我希望有人可以帮助并指出它为什么不起作用以及如何解决它。从下面的代码我期望程序打印出与生成的数字相关联的3个不同的文本,而不是" Cherry"打印三次。
// Generates 3 different random values between 1-4 and stores them within the slotVal array.
int slotVal[3], counter;
srand(time(NULL));
for (counter = 0; counter < 3; counter++) {
slotVal[counter] = rand() % 4 + 1;
}
// Checks generated values and prints associated text.
for (counter = 0; counter < 3; counter++) {
if (slotVal[counter] = 1) {
printf("Cherry");
}
else if (slotVal[counter] = 2) {
printf("Bell");
}
else if (slotVal[counter] = 3) {
printf("Orange");
}
else
printf("Horseshoe");
}
答案 0 :(得分:3)
您的if语句错误,您指定(=)不比较(==):
// Checks generated values and prints associated text.
for (counter = 0; counter < 3; counter++) {
if (slotVal[counter] == 1) {
printf("Cherry");
} else if (slotVal[counter] == 2) {
printf("Bell");
} else if (slotVal[counter] == 3) {
printf("Orange");
} else {
printf("Horseshoe");
}
}
如果执行if(something = 1)
,则评估的条件将为1
,因为赋值运算符返回指定的变量。由于1
评估为true
,您的第一个条件将被满足,其他else
块将被忽略。
避免此特定错误的一些有用提示是:
if(1 == variable)
而不是if(variable == 1)
,因为第一个引发了编译(如果您只使用一个=
符号)错误而第二个没有; #define EQUALS ==
,您可以if(variable EQUALS 10)
答案 1 :(得分:0)
在C中编程时,始终启用可以找到的所有编译器警告。 C不是一种适合初学者的语言,它为你提供了很多方法来射击自己。启用编译器警告可以防止以下几种方式。
使用GCC时,至少启用-Wall -Wextra
警告。他们会警告您,在if
条件中,您使用的是赋值运算符=
,而不是比较运算符==
。