rand()随机数生成C++
rand() Random Number Generation C++
我正在尝试使用rand()
函数生成伪随机int。它是有效的,但我的问题是它总是为int"选择"相同的名称。我认为,如果你把rand()
放在main的while循环中,它是85左右。)
有办法解决这个问题吗?这是我的代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
int guess;
int danse = rand() % 101;
using namespace std;
void more(){
cout << "The number that you need to guess is higher!";
return;
}
void lower(){
cout << "The number that you need to guess is lower!";
return;
}
int main(){
while(1){
cout << "nGuess a number 0-100: ";
cin >> guess;
if (guess > danse){
lower();
}
if (guess < danse){
more();
}
if (guess == 101){
break;
}
if (guess == danse){
cout << "nYOU GUESSED IT. ARE YOU A WIZARD?! BECAUSE THAT IS PRETTY NEAT.";
break;
}
}
}
只是一些旁注:请不要试图告诉我我已经知道的事情,比如解释我为什么使用带return的void函数。请,也不要试图说服我使用命名空间std;是做这件事的"坏"方法。我知道还有其他方法。我选择不这样做。
谢谢!
在使用rand
之前,您需要通过调用srand一次来为随机数生成器种子。当前时间是一种既便宜又简单的方法,可以选择不同程序运行的种子。
int danse;
int main(){
srand(time(NULL));
danse = rand() % 101;
rand()
生成一个伪随机序列,从给定的种子对于任何指定的种子,以下所有值都将是一样的。默认情况下,种子为1。
为了在每次运行程序时获得不同的值,您需要为生成器(使用srand()
)添加一些内容从用户的角度来看,这似乎是随机的。最好的Unix机器上的解决方案是从"/dev/random"
来创建一个int
,并使用它。在其他系统,你必须找到其他东西;time( NULL )
为经典的解决方案,但当然,如果程序启动在同一秒内多次(甚至在不同的机器上),它将输出相同的序列。散列附加值,比如进程id、机器的ip地址等等,将大大改善情况。
最后:一些生成器将返回种子作为第一个价值这是非常可预测的,尤其是如果你只使用time( NULL )
。您可能想要生成在实际开始之前丢弃的随机值使用它们。
您没有看到随机数生成器,因此每次运行应用程序时,它都会给您一组完全相同的"随机"数(这对调试很有用)。要修复它,请将您的主菜单修改为如下所示:
int danse = 0;
int main()
{
std::srand(std::time(0)); // seed the random number generator
danse = rand() % 101;
// rest of your main
}
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- if数组上的随机数
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 半随机数生成C++
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 有没有办法在 c++ 中同时生成随机数?如果没有,是否有解决方法?
- 具有随机数的二维数组不会更改
- 随机数未达到限制
- 我想生成许多矩阵并用随机数填充它
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- 制作具有平均值的随机数生成器
- 为什么 rand 不在我的代码中生成随机数?
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 从给定种子生成相同的随机数序列C++
- 随机数生成函数说明
- C++ 尝试生成随机数时弹出警告帮助?
- 尝试在 c++ 中创建随机数生成器并收到错误
- 从给定的随机数组值生成随机数 Arduino程序C++
- 如何在个人计算机和群集 (c++) 上生成相同的随机数