C++随机int函数

Err*_*or1 4 c++ random function srand

您好亲爱的stackoverflow成员我最近开始学习C++,今天我写了一个小游戏,但我的随机功能无法正常工作.当我不止一次调用我的随机函数时,它不会重新生成一个数字,它会一遍又一遍地打印相同的数字.如何在不使用for循环的情况下解决此问题?谢谢

#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
int rolld6();

int main()
{
    cout<<rolld6()<<endl;
    cout<<rolld6()<<endl;
    system("PAUSE");
    return 0;

}

int rolld6()
{
    srand(time(NULL));
    return rand() % 6 + 1;;
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 11

srand(time(NULL));通常应该在开始时进行一次,main()而不是再次进行.

每次拨打rolld6同一秒时,你拥有它的方式会给你相同的数字,这可能很多次,而且在你的样本中,由于你连续两次调用它,所以几乎可以保证.

试试这个:

#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <stdlib.h>

int rolld6 (void) {
    return rand() % 6 + 1;
}

int main (void) {
    srand (time (NULL));
    std::cout << rolld6() << std::endl;
    std::cout << rolld6() << std::endl;
    system ("PAUSE");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另外要记住的一件事是,如果你快速连续两次运行这个程序.如果时间没有改变,你将在两次运行中获得相同的两个数字.当你有一个脚本多次运行程序并且程序本身很短暂时,这通常只是一个问题.

例如,如果您取出了您的system()调用并且有一个cmd.exe调用它的脚本三次,您可能会看到如下内容:

1
5
1
5
1
5
Run Code Online (Sandbox Code Playgroud)

这不是你通常会做的事情,但应该记住场景弹出的可能性.


GWW*_*GWW 8

您不断重新种植随机数生成器.只srand(time(NULL));在程序开头调用一次.