Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成随机数并在控制台上打印(C+;+;) 我正在研究一种简单的方法,生成随机数(从1到100),并用C++在控制台上打印,但问题是每次运行程序时,每次都会完全相同的数字,这是随机的,一个数字不重复,但每次都是相同的随机数顺序。p>_C++_Visual Studio - Fatal编程技术网

生成随机数并在控制台上打印(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;jcout必须使用
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;jcout您需要为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中定义的时间函数)它工作得非常好!!谢谢!如果这是你问题的答案,请投票并将其标记为答案。我不能投票,因为我的声誉:(但我将其标记为最佳答案!