Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for循环不等待完成C++?_C++_Loops_For Loop - Fatal编程技术网

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

for循环不等待完成C++?,c++,loops,for-loop,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 wi

我在使用此代码时遇到一些问题:

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循环,这个数字就会改变,然后它似乎只会在这两次之间增加,而实际上它会进行计算

我是否需要指定我希望循环在继续之前等待所有事情都完成?

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

使用srand植入rand函数的要点是,生成的随机数序列随每个程序的运行而不同。您的程序中只需要一个srand


顺便说一下,兰德总是返回一个非负数,所以abs是无用的。尽管r可以是0,但要小心,并且要除以r,这可能具有未定义的行为。为安全起见,请执行r=rand+1。

您的种子在同一秒内是相同的,因此该种子的随机数将是相同的。你可以试着把srand拿出来

srand( (unsigned)time(NULL) ); // set the seed
for (long long int loop = 0; loop < 50000000; loop++)
{
    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;
}

干杯

在您的节目中,您只能给srand打一次电话。在每次迭代重置种子的时候,如果在同一秒钟内重复多次,因为时间每秒钟都在变化,那么将得到相同的伪随机数序列,而您只选择第一个值。@Aleph0,它完全有效,它的意思与long-long或long-long-signed int相同,如果你真的喜欢的话typing@Aleph0:您甚至可以混合顺序,如长符号整数long@Pyrobisqit:您的示例中缺少了一个},尽管我确信您的实际代码中有它。如果我是你,我会编辑这个问题。从一个完全不同的角度来看,为什么r-r*r/r接近0,当然?你是对的。我有时会得到零分,想知道发生了什么。谢谢