我正在尝试使用rand()
函数生成伪随机整数。它的工作原理,但我的问题是它始终为int选择相同的名称。 (在这种情况下,它是41.我认为如果你将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;
}
}
}
请注意几点:请不要试着告诉我我已经知道的事情,例如,解释为什么我使用void函数,返回。请,也不要试图说服我使用命名空间std;这是做坏事的“坏”方式。我知道还有其他方法可以做到这一点。我选择不这样做。
谢谢!
答案 0 :(得分:5)
您需要在使用rand
之前调用srand一次为随机数生成器播种。当前时间是一种便宜且简单的方法来选择不同程序运行的种子。
int danse;
int main(){
srand(time(NULL));
danse = rand() % 101;
答案 1 :(得分:2)
rand()
生成一个伪随机序列,从给定开始
种子。对于任何指定的种子,所有以下值都将
是相同的。默认情况下,种子为1.
为了在每次运行程序时获得不同的值,
你需要使用某些东西为生成器(使用srand()
)播种
从用户的角度来看,这似乎是随机的。最好的
解决方案在Unix机器上,是从中读取足够的字节
"/dev/random"
创建int
并使用它。在其他方面
系统,你必须找到别的东西; time( NULL )
是
经典的解决方案,但当然,如果程序启动
在同一秒内多次(即使在不同的机器上),
它将输出相同的序列。散列其他值,
像进程ID,机器的IP地址等,
将大大改善。
最后:一些发电机会将种子作为第一个返回
值。这是非常可预测的,特别是如果你只是使用
time( NULL )
。你可能想生成几个
你实际开始之前扔掉的随机值
使用它们。
答案 2 :(得分:1)
您没有看到随机数生成器,因此每次运行应用程序时它都会为您提供完全相同的“随机”数字集(这对调试很有用)。要修复它,请修改您的主要内容,如下所示:
int danse = 0;
int main()
{
std::srand(std::time(0)); // seed the random number generator
danse = rand() % 101;
// rest of your main
}