我遇到这个问题,生成的rand num不会增加我喜欢的方式。我已经尝试了多种方法来增加值,如果用户输入-1或减少值是用户输入1.如果用户输入-1,投影输出x应该在第一个输出和上限值之间增加,如果如果用户输入1,则应在第一个输出和下限值之间找到一个。我的部分代码如下。任何帮助表示赞赏。
我试过没有运气:
i = x (rand() % (upper + lower));
x = i +1;
部分代码:
switch(input)
{
case -1:
{
x = x+1+ (rand() % (upper-x-1));
printf("My guess is %d \n", x);
break;
}
case 0:
{
printf("I win\n");
break;
}
case 1:
{
x = (rand() % (upper+lower)) +lower;
printf("My guess is %d \n", x);
break;
}
default: printf("Wrong choice try again\n");
break;
编辑:更改了-1的情况,但它增加4然后增加1并停在55这是正确的但我无法弄清楚跳过4.我正在尝试另一种方式,如果用户输入lower = 1如果生成的第一个数字是35,则上限= 55,那么它将在该范围内的36-54之间搜索,但是像42这样的随机数不仅仅增加1。
答案 0 :(得分:1)
在我看来,你试图以错误的方式生成随机数。要像你所描述的那样制作一个下限和上限,试试这个:
x = lower + (rand() % (upper-lower)); // lower <= x < upper
在-1的情况下,您可以尝试使用x+1
作为下限。在减少数量的情况下,使上限等于x
。
case -1:
{
if (x < upper-1) {
x = x+1 + (rand() % (upper-x-1));
}
...
case 1:
{
if (x > lower) {
x = lower + (rand() % (x-lower));
}
...
我不确定您在upper
和lower
变量中定义了哪些值,但只确保下限小于上限。我还添加了一个特殊条件,其中可以发生除零。