C中的老虎机游戏 - 印刷卷轴问题

时间:2016-11-26 22:41:57

标签: c arrays loops

我试图创建一个小型老虎机游戏,每个卷轴有三个卷轴和四个可能的符号(铃,橙,樱桃和马)。

我开始生成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");
}

2 个答案:

答案 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条件中,您使用的是赋值运算符=,而不是比较运算符==