【发布时间】:2021-02-26 15:50:15
【问题描述】:
我正在尝试使 rand_draw 保持 0-8 之间的随机正数。但是这段代码在某些迭代中不断给出负数。发生了什么事?
srand(time(0));
int draw_count = 8;
int rand_draw = (2 * rand()) % draw_count;
cout << rand_draw << endl;
【问题讨论】:
-
为什么是
2 * rand()?这可能会给你溢出,因此是负数。 -
rand()返回一个介于 0 和RAND_MAX之间的值,通常与INT_MAX相同。所以一半时间2 * rand()会溢出。这是未定义的行为,但结果通常是负值。 -
如果它没有给你溢出,你永远不会得到奇数。无论如何,除非绝对没有其他方法,否则不要在 C++ 中使用 rand()。使用
std::uniform_int_distribution<int> -
这不是对 C++ 的介绍,而是古代 C++ 的历史。我不明白为什么今天要教这个。你被教导编写遗留代码。这个函数不会通过任何严格的代码审查。
-
@ThomasSablik • 让今天的新程序员为明天的未来编写昨天的遗留代码!我满怀期待地期待过去!