C++ C++;在while循环中调用时相同的随机数

C++ C++;在while循环中调用时相同的随机数,c++,random,while-loop,C++,Random,While Loop,我正在创建不同长度和方向的向量,有些行为我无法解释 我从一个随机种子开始,并声明一个向量: srand(time(NULL)); std::vector<Particle> psystem; srand(时间(空)); std::向量psystem; 然后,以下代码创建明显的“随机”向量: float v[3]={0}; 对于(int i=0;i

我正在创建不同长度和方向的向量,有些行为我无法解释

我从一个随机种子开始,并声明一个向量:

srand(time(NULL));
std::vector<Particle> psystem;
srand(时间(空));
std::向量psystem;
然后,以下代码创建明显的“随机”向量:

float v[3]={0};
对于(int i=0;i
添加的while循环使psystem中的所有元素具有相同的精确值(例如,所有元素都具有[0.00345,-0.234,0.00701]):

const float min_length=0.0174;
float v[3]={0};
对于(int i=0;i

这运行得非常快,所以我不介意它循环一点,直到一个随机的v[0+1+2]组合满足while条件。然而,我不知何故在这过程中扼杀了随机分配。我缺少什么?

数组“v”在第一次迭代后将保留相同的值。您应该在每个循环中重新初始化它

float v[3] = {0, 0, 0};
for(int i = 0; i < vectors; ++i) {
    v[0] = 0;
    v[1] = 0;
    v[2] = 0;
    while(sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]) < min_length) {
        v[0] = float(rand() % 200 - 100) / 3000;
        v[1] = float(rand() % 200 - 100) / 3000;
        v[2] = float(rand() % 200 - 100) / 3000;
    }
    Particle p(0, 0, 0, v[0], v[1], v[2]);
    psystem.push_back(p);
}
float v[3]={0,0,0};
对于(int i=0;i
第一次迭代后,数组“v”将保持相同的值。您应该在每个循环中重新初始化它

float v[3] = {0, 0, 0};
for(int i = 0; i < vectors; ++i) {
    v[0] = 0;
    v[1] = 0;
    v[2] = 0;
    while(sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]) < min_length) {
        v[0] = float(rand() % 200 - 100) / 3000;
        v[1] = float(rand() % 200 - 100) / 3000;
        v[2] = float(rand() % 200 - 100) / 3000;
    }
    Particle p(0, 0, 0, v[0], v[1], v[2]);
    psystem.push_back(p);
}
float v[3]={0,0,0};
对于(int i=0;i
或将其转换为do while循环。啊,谢谢你,我知道这一定是我没有看到的基本内容。我必须在for循环中将v[0-2]重置为0。或者将其转换为do while循环。啊,谢谢你,我知道这一定是我没有看到的基本内容。我必须在for循环中将v[0-2]重置为0。
float v[3] = {0, 0, 0};
for(int i = 0; i < vectors; ++i) {
    v[0] = 0;
    v[1] = 0;
    v[2] = 0;
    while(sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]) < min_length) {
        v[0] = float(rand() % 200 - 100) / 3000;
        v[1] = float(rand() % 200 - 100) / 3000;
        v[2] = float(rand() % 200 - 100) / 3000;
    }
    Particle p(0, 0, 0, v[0], v[1], v[2]);
    psystem.push_back(p);
}