必须在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;
}
我在编程方面相当新,并且非常感谢任何帮助:)
答案 0 :(得分:2)
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;
}