C++ for循环不等待完成?

标签 c++ loops for-loop

我在使用这段代码时遇到了一些问题:

for (long long int loop = 0; loop < 50000000; loop++)
{
    srand( (unsigned)time(NULL) ); // set the seed
    int r = abs(rand()); // stores the random seed for this loop
    int res = loop + r - r * r / r; // random operations with the loop number and the random seed.
    cout << "Loop number: " << loop << ". " << "Result: ";
    cout << res << endl;
}//this was missing

如果您运行该代码,您可以在控制台中非常清楚地看到它的输出每隔几秒才进行一次计算。这是怎么回事?每个循环的数字应该完全不同,因为它是用随机数进行计算的。相反,每运行 x 个循环,数字就会发生变化,然后它似乎只会在这些时间之间增加,而实际上是在进行数学运算。

我是否需要指定我希望循环等到一切都完成后再继续?

最佳答案

因为您正在使用时间种子在循环中执行 srandtime() 的粒度以秒为单位,因此在一秒过去之前,它将返回相同的种子,因此返回相同的随机数。在循环外执行 srand

srand 为 rand 函数播种的要点是每次运行程序时生成的随机数序列都不同。您的程序中只需要一个 srand

顺便说一句,rand() 总是返回一个非负数,所以 abs 是无用的。请注意 r 可以是 0,并且您确实除以 r,这可能具有未定义的行为。为了安全起见,执行 r = rand()+1

关于C++ for循环不等待完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546059/

相关文章:

c++ - C++ 和 OpenGL 矩阵顺序之间的混淆(行优先 vs 列优先)

c++ - C/C++ - 以编程方式运行 Makefile

javascript - 如何在 JavaScript 中压缩 for 循环

python - 如何在 for 循环中注释类型?

c++ - 累积没有给出我的 vector 的正确总和

c++ - 如何让CLion显示异常?

loops - 如果列表为空,Ansible 如何跳过循环

java - 快速访问嵌套集合

php - 循环中的 SQL 更新(mysql、PHP)

iphone - 索引对象矩阵 (UILabel)