C 如何修改此函数以生成0<;int<;骰子是7?
*我想用C语言为我的大学制作一个骰子程序,但讲师特别要求我不要修改他给我的主函数,但我不知道如何在他的函数中添加数学命令C 如何修改此函数以生成0<;int<;骰子是7?,c,function,random,C,Function,Random,*我想用C语言为我的大学制作一个骰子程序,但讲师特别要求我不要修改他给我的主函数,但我不知道如何在他的函数中添加数学命令 float getRand() { return rand() / (RAND_MAX+1.0); } 来做这个骰子 我只是在学习,所以这一切都是新的 这就是任务: 写一个“掷骰子”游戏。您可能熟悉六面骰子,但有些游戏使用四、六、八、十、二十和一百面骰子 让计算机为6面模具和20面模具选择一个随机数。 使用getRand()函数,但不要修改它。 编写一个int ro
float getRand() {
return rand() / (RAND_MAX+1.0);
}
来做这个骰子
我只是在学习,所以这一切都是新的
这就是任务:
写一个“掷骰子”游戏。您可能熟悉六面骰子,但有些游戏使用四、六、八、十、二十和一百面骰子
让计算机为6面模具和20面模具选择一个随机数。
使用getRand()函数,但不要修改它。
编写一个int rollDie(…)函数以获取一个随机值。
模具的值有一个整数参数(边的整数个数),
调用getRand()函数。
获取它返回的值(介于0和0.999之间的浮点数…),然后进行一些数学运算,将其转换为介于1和边数(包括边数)之间的整数。
返回号码。
int main()只能包含:
int main() {
srand( time(NULL) ); // init random
getRand(); // kick-start the random numbers
int value = 0;
value = rollDie(6);
printf("6-sided die: %i\n", value);
value = rollDie(20);
printf("20-sided die: %i\n", value);
getchar();
}
这是最明显的实现:
int rollDie(int number_of_sides) {
return (getRand() * number_of_sides) + 1;
}
但是
getRand()
使用float
会带来许多问题(如注释中所述)。在实际代码中,通常的rand()%max+1
就足够了。首先,我现在可以自由调用函数rollDice()
对于任何感兴趣的人来说,已经有了一个。这里应该引用它,因为答案对未来的读者应该是有价值的
你的教授显然想让你写些
int rollDice(int max) {
return (int)(getRand() * max) + 1;
}
提示:您也不应该修改
getRand()
。执行类似于introlldie(intmax){/*您的代码在这里调用getRand()*/}
的操作。第二句话:使用float进行此操作是疯狂的,但是如果您被要求这样做,那么就这样做吧。。。试想一下,要将一个介于0和1之间的数字转换为介于1和6之间的数字,应该做些什么——实际上应该是简单的数学@naltipar:编辑问题时不应删除语法错误或更改支撑样式…@Olaf:rollDie()
OP预期实现的内容应返回int
,因此,到目前为止还行。我想这里的float getRand()
可能是一种“简单的方法”,可以避免典型的模函数引入的偏差。。。太奇怪了。@FelixPalmen:两者都不对。你必须重新开始。这里有很多这样的例子,更不用说网络的“其余部分”。这段代码是正确的答案,但真正让我困惑的是,这个函数不是在说:取getrand()的值,它在0到1之间,然后乘以边数,再加上1,如果值是0.9,那么它就是6边骰子了(0.9*6)+1,也就是7?,我的意思是int(0.999*6)+1=7@user276586(0.999*6)+1=6.994
,转换为int
时为6
。小数部分被截断。