在 c++ 中使用 rand() 时,我看到一个非常奇怪的行为。这是我的代码。
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <limits.h>
#define N 10
int main() {
srand(time(NULL));
while(true) {
int i = N * ((double) rand() / (RAND_MAX));
//std::cout << i << std::endl; // If there is any code here, everything goes fine.
if (i == N) {
std::cout << "i " << i << " should never happen" << std::endl;
} else {
std::cout << ".";
}
}
}
这是输出:
i 10 should never happen
i 10 should never happen
i 10 should never happen
...
这对我来说真的没有意义,因为我认为我永远不会是 10 岁。奇怪的是,如果我尝试以下任何一种方法,它会完全正常:
- 我使用调试器和单步跟踪代码,i 的值在手表中是随机的。
- 我添加了 sdt:cout 之类的代码,如代码注释中所示。
- 我使用 (RAND_MAX + 1.0) 而不是 (RAND_MAX)。
我的编译器是 mingw32-g++.exe (TDM-2 mingw32) 4.4.1。
这真的让我很困惑,谁能告诉我这是怎么回事?