生成随机数并在控制台上打印(C+;+;) 我正在研究一种简单的方法,生成随机数(从1到100),并用C++在控制台上打印,但问题是每次运行程序时,每次都会完全相同的数字,这是随机的,一个数字不重复,但每次都是相同的随机数顺序。p>
这是我的密码生成随机数并在控制台上打印(C+;+;) 我正在研究一种简单的方法,生成随机数(从1到100),并用C++在控制台上打印,但问题是每次运行程序时,每次都会完全相同的数字,这是随机的,一个数字不重复,但每次都是相同的随机数顺序。p>,c++,visual-studio,C++,Visual Studio,这是我的密码 // DigitDisplayer.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <cstdlib> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int max = 100; int m
// DigitDisplayer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int max = 100;
int min = 1;
int range = (max - min) + 1;
int randnum;
bool nums[100];
for(int j = 0; j < sizeof(nums); j++)
{
nums[j] = false;
}
for(int i = 0; i < range; i++)
{
int randnum = (rand() % range) + 1;
if(nums[randnum] == false){
nums[randnum] = true;
cout<< randnum << "\n\n";
}
else {
int randnum = (rand() % range) + 1;
}
}
cout<< "DONE!!!\n\n";
system ("pause");
}
//DigitDisplayer.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
int max=100;
int min=1;
整数范围=(最大-最小)+1;
int-randnum;
布尔努姆斯[100];
对于(int j=0;j cout必须使用srand
来设置rand
函数的种子,否则它总是返回相同的数字集。
time()
函数在cstdlib
选中此项:
// DigitDisplayer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int max = 100;
int min = 1;
int range = (max - min) + 1;
int randnum;
bool nums[100];
srand (time(NULL));
for(int j = 0; j < sizeof(nums); j++)
{
nums[j] = false;
}
for(int i = 0; i < range; i++)
{
int randnum = (rand() % range) + 1;
if(nums[randnum] == false){
nums[randnum] = true;
cout<< randnum << "\n\n";
}
else {
int randnum = (rand() % range) + 1;
}
}
cout<< "DONE!!!\n\n";
system ("pause");
}
//DigitDisplayer.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
int max=100;
int min=1;
整数范围=(最大-最小)+1;
int-randnum;
布尔努姆斯[100];
srand(时间(空));
对于(int j=0;j cout您需要为ranom数字生成器设置种子。请查看如何执行此操作
在使用rand()
之前,您通常需要在某处调用srand()
一次。请注意,每次运行程序时,您应该使用不同的值调用srand()
例如,使用“种子”是最简单的方法:
int main()
{
srand(time(NULL));
.....
rand();
.....
}
计算机无法生成随机数。相反,它们使用一种算法生成一系列近似随机数行为的数字。这些算法称为伪随机数生成器(PNRGs)。在我所知的每种情况下,这些PNRG都可以用一个数字“播种”,这决定了伪随机数序列将从何处开始。如果每次需要使用一个不同的数字来播种PNRG时,都希望得到不同的结果。对于大多数情况,系统计时器足以生成有效的随机数字序列。srand(time(NULL))
将为您执行此操作,正如其他人所解释的那样
顺便说一句:C中的内置随机数生成器很糟糕。它不适合所有的,而是最随意的设置;如果你想要一个像样的随机数源,考虑使用像MelShanne Wrutter之类的东西。在高度敏感的情况下(例如在线赌博等),时间的播种也会有问题。 < P> C++中的随机数发生器实际上是一个伪随机序列生成器,它从给定的种子开始。
这样做有两个原因:
在所有实现C++库的机器上很难找到一个真正的随机源。
- 显然需要一个生成可重复序列的随机数生成器(例如,如果单元测试依赖于随机数,则希望测试是可重复的,并接收相同的“随机数”)
这就是为什么您有srand函数,它为随机数生成提供“种子”
如果不调用srand
或使用相同的值调用它,则“随机”序列将始终相同
如果使用不同的种子调用它,则生成的序列将是唯一的(实际上,它可能有一个模式或是可预测的,这取决于实现)。您应该使用srand()初始化随机数生成器
在程序开始时。另外,如果您使用预编译头机制,您的想法是将iostream和cstdlib放在stdafx.h中,那么编译器可以跨编译器重用加载的头。我认为值得强调和解释更改。您是否需要包括
或类似内容?对不起,updated。(cstdlib中定义的时间函数)它工作得非常好!!谢谢!如果这是你问题的答案,请投票并将其标记为答案。我不能投票,因为我的声誉:(但我将其标记为最佳答案!