如何显示轮盘赌轮的随机数(和颜色)?

时间:2014-04-18 18:51:29

标签: c random

必须在C中创建一个轮盘赌轮用于课程作业,尝试生成随机数并让程序说明它选择的随机数的颜色(例如选择3并且程序给出一个输出,说明所选的口袋是红色的)。我做了一个小程序,效果不好。

#include<stdio.h>
int random_number(int min_num, int max_num);

int main(void) {

    printf("Landed on pocket %d\n",random_number(0,36));
      return 0;
    }

    int random_number(int min_num, int max_num)
    {
        int result=0,low_num=0,hi_num=0;
        if(min_num<max_num)
        {
            low_num=min_num;
            hi_num=max_num+1; // this is done to include max_num in output.
        }else{
            low_num=max_num+1;// this is done to include max_num in output.
            hi_num=min_num;
        }
        srand(time(NULL));
        result = (rand()%(hi_num-low_num))+low_num;


    scanf ("%d", &result);

    if (result == 1 || 3 || 5 || 7 || 9 || 12 || 14 || 16 || 18|| 19 || 21 || 23 || 25 || 27 || 30 || 32 || 34 || 36) 
    {           
        printf (" Red \n");

    }    
    else
    {
        if(result == (2|| 4|| 6|| 8|| 10|| 11|| 13|| 15|| 17|| 20|| 22|| 24|| 26|| 28|| 29|| 31|| 33|| 35))
        printf (" Black ");
        }

        return result;
 }

我在编程方面相当新,并且非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

你正在寻找这样的东西吗?回想一下:数字范围从1到10和19到28,奇数是红色,甚至是黑色。在11到18和29到36的范围内,奇数是黑色甚至是红色。 0和00是绿色。

if( ( ( (result>=1  && result<=10) || (result>=19 && result<=28) ) && result%2==1) ||
    ( ( (result>=11 && result<=18) || (result>=29 && result<=36) ) && result%2==0 ) ) {
    printf (" Red \n");
}
else if( result == 0 ) { // doesn't account for double 0 though!
    printf (" Green \n");
}
else {
    printf (" Black \n");
}

答案 1 :(得分:1)

您使用||运算符的方式完全错误。你应该在这里使用switch

switch( result) {
    case 1:
    case 3:
    case 5:
    // and so on...
    case 34:
    case 36:
        printf( "Red");
        break;
    default:   // otherwise
        printf( "Black");
        break;
}

修改

运营商||是一个“符合逻辑的OR&#39; - 它需要两个int个操作数,如果至少有一个操作数是&#39; true&#39;则返回1。 (在整数值的情况下表示&#39;非零&#39;)并且如果两者都为零则返回0。它的优先级低于比较运算符==的优先级,因此第一个条件表达式

result == 1 || 3 || ... || 36

计算为

(result == 1) || (3 || (... || 36))

比较返回1或0,具体取决于result值。无论如何,逻辑“或”#39; 3表示1(&#39; true&#39;),结果通过表达式的其余部分传播。这就是为什么第一个if始终满足并且程序结果始终为&#34;红色&#34;。

另一方面,第二个if会将result与几个非零数字的逻辑和进行比较 - 也就是说,1。当然,这与你的完全不同意图。

如果你真的想用||写下这些条件,你需要这个表格:

if(result == 1 || result == 3 || ... || result == 36)

if(result == 2 || result == 4 || ... || result == 35)

但是switch指令更具可读性。

另一种方法是准备一个静态数组来翻译result。这可能看起来很神秘,但它是实现所需结果的最快方法:

static const int ColorCode[37] = {
    0,                    // zero green
    1, 2, 1, 2, 1, 2, ... // red and black
    2, 1, 2, 1, 2, 1};    // black and red

int color = ColorCode[ result];
switch( color) {
    case 0: printf( "Green"); break;
    case 1: printf( "Red");   break;
    case 2: printf( "Black"); break;
}