C 如何修改此函数以生成0<;int<;骰子是7?

C 如何修改此函数以生成0<;int<;骰子是7?,c,function,random,C,Function,Random,*我想用C语言为我的大学制作一个骰子程序,但讲师特别要求我不要修改他给我的主函数,但我不知道如何在他的函数中添加数学命令 float getRand() { return rand() / (RAND_MAX+1.0); } 来做这个骰子 我只是在学习,所以这一切都是新的 这就是任务: 写一个“掷骰子”游戏。您可能熟悉六面骰子,但有些游戏使用四、六、八、十、二十和一百面骰子 让计算机为6面模具和20面模具选择一个随机数。 使用getRand()函数,但不要修改它。 编写一个int ro

*我想用C语言为我的大学制作一个骰子程序,但讲师特别要求我不要修改他给我的主函数,但我不知道如何在他的函数中添加数学命令

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
。小数部分被截断。