Rand() % 14 只生成值 6 或 13

2021-12-21 00:00:00 random c++ srand

每当我运行以下程序时,返回的值总是 6 或 13.

Whenever I run the following program the returned values are always 6 or 13.

#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

//void randomLegs();
//void randomPush();
//void randomPull();
//void randomMisc();


int main(int argc, const char * argv[])
{
    srand(time(NULL));
    //randomLegs();
    cout << rand() % 14;
    return 0;
}

今天和昨天我已经运行了将近一百次这个程序.

I have run the program close to a hundred times during today and yesterday.

谁能告诉我我做错了什么?

Can anyone tell me what I'm doing wrong?

谢谢.

顺便说一下,如果我将 rand() 的范围更改为 13 或 15,它就可以正常工作.

By the way, if I change the range of rand() to say 13 or 15 it works just fine.

推荐答案

我可以使用 Xcode 5 在 Mac OS X 10.9 上重现该问题 - 看起来它实际上可能是一个错误,或者至少是 的限制rand()/srand() 在 OS X 10.9 上.

I can reproduce the problem on Mac OS X 10.9 with Xcode 5 - it looks like it might actually be a bug, or at least a limitation with rand()/srand() on OS X 10.9.

我建议您使用 arc4random()相反,它比 rand() 效果更好,并且不需要随机化种子:

I recommend you use arc4random() instead, which works a lot better than rand(), and which doesn't require that you randomize the seed:

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, const char * argv[])
{
    cout << (arc4random() % 14) << endl;
    return 0;
}

测试:

$ g++ -Wall -O3 srand.cpp && ./a.out
5
$ ./a.out
8
$ ./a.out
0
$ ./a.out
8
$ ./a.out
11
$ ./a.out
8
$ ./a.out
3
$ ./a.out
13
$ ./a.out
9
$

相关文章