C++ ';兰特';C+中的函数+;?

C++ ';兰特';C+中的函数+;?,c++,loops,if-statement,for-loop,random,C++,Loops,If Statement,For Loop,Random,我正在尝试制作一个死亡预测器,它有一个随机的机会让你的角色随着你的进步而死亡。我要让它有多个死亡的机会,随着年龄的增长,死亡的机会也会增加。我如何修复这个基本的rand函数,使其int RandomFactor有一个1-20的数字,并随机激活以杀死你(如果这听起来像虐待狂的话,对不起) #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ srand(时间(空)); 整数随机因子; 随机因子=兰德(); 20 % 1;

我正在尝试制作一个死亡预测器,它有一个随机的机会让你的角色随着你的进步而死亡。我要让它有多个死亡的机会,随着年龄的增长,死亡的机会也会增加。我如何修复这个基本的rand函数,使其int RandomFactor有一个1-20的数字,并随机激活以杀死你(如果这听起来像虐待狂的话,对不起)

#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
srand(时间(空));
整数随机因子;
随机因子=兰德();
20 % 1;
用于(双重计数=0;计数<20;计数++){
如果(计数<20){
睡眠(360);

不能在rand()后面加分号。请尝试使用RandomFactor=rand()20%1;

C++允许您随意丢弃值,因此当您这样做时

20 % 1;
它在计算时不会抱怨,只是简单地抛出值

也许你的意思实际上是:

RandomFactor = rand() % 20;
但是,这将导致一个范围为[0,19]的数字,因此您可能希望添加1:

RandomFactor = (rand() % 20) + 1
所以现在范围的两端都将增加1,结果是[1,20]包括在内


此外,if语句

if(count < 20)
if(计数<20)

将>强>始终< /强>是循环中的真值(毕竟是循环条件),所以<代码>否则将不能运行< /C++ > .< /p> 可以使用<代码> rand % 20 < /C> >但它不会真正统一,它将包含偏倚。C++中最好的选择是使用<代码> STD::MunsixIn分布> <代码> >

#include <random>
#include <iostream>

int main()
{
    std::random_device rd;
    std::mt19937 gen( rd());
    std::uniform_int_distribution<> dis( 1, 20);

    for ( int n=0; n<10; ++n)
        std::cout << dis(gen) << ' ';
    std::cout << '\n';
}
#包括
#包括
int main()
{
std::随机_装置rd;
标准:mt19937 gen(rd());
标准:均匀分布分布图(1,20);
对于(int n=0;n尝试使用
drand()
,它将返回一个介于0和1之间的统一数字,然后可以进行缩放。可以使用
srand48(seed)
初始化该数字。例如,如果希望有20%的机会触发,可以执行以下操作:

 if( drand() <= 0.05f ) // (5% chance)
     // do something

不要尝试
RandomFactor=rand();20%1;
try
RandomFactor=rand()%20;
.3 IntelliSense:应为“;”c:\Users\Parent\Desktop\DeathPredictionv1\DeathPredictionv1\DeathPredictionv1.cpp 18 24 DeathPredictionv1如果这样做,我会收到错误消息:(Intellisense可能是智能的,但它不是通灵的。它无法预测您何时要进行计算。-1这肯定会导致语法错误。除统计和加密外,这种规模的偏差几乎可以接受:低数字比高数字只多0.0061012812%。我不确定您的结果我们谈论的是将军case@MooingDuck:如果该语言已经支持更好的随机性,那么为什么选择较差的模式呢?还要注意,该示例使用的值可能比
time()
提供更多的随机性(不同线程/集群节点的内部精度可能相同/…)@Benjaminbanner:因为我永远记不起这一代人的所有比特,但我能永远记得
rand()
:/@0d0a:你提到了
rand()%20
,加上另一个选项,所以我给了你一个向上的投票。
rand_MAX
32768
或更高,所以最坏的情况是,0-7被选1639次,8-19被选1638次(8*1639+8*1638=32768)。然后1639/1638-1显示选择的低数值比选择的高数值多0.061050061%。我还想说,原始实现似乎没有实现目标,因为对rand()的调用在循环之外,所以每次循环迭代都有相同的值。要么每个人都死了,要么没有人is@rdowell也许,
RandomFactor
正在计算是否会出现僵尸末日,在这种情况下,这是正确的。谁说呢?
 if( drand() <= 0.05f ) // (5% chance)
     // do something
int randomNumber = ceil( drand()*20 ); 
// creates a uniform distribution between 1 and 20, inclusive