rand() 重复值,尽管只有一个 srand() 调用
rand() repeating values despite only one srand() call
我有一个函数可以生成 x(参数)个随机数,删除重复项,并且 returns 将值存储在数组中。
我正在使用 rand() 来调用随机数,但是如果我调用 x 参数设置为 5 的函数,它会变成一个无限循环,因为 rand() 连续 returns 我是相同的 4 或 5数字。
我只在 main() 中调用过一次 srand()。
int main(void){
srand(time(NULL));
erase = eraser(4);
}
int* eraser(int array_size)
{
array_size++;
int* remove_ids = malloc(sizeof(int*) * array_size);
int t, v;
int i;
for(i = 0; i < array_size; i++) {
t = 1+(rand() & 80);
v = 1+(rand() & 80);
printf("t=%d , v=%d\n", t, v);
remove_ids[i] = t;
if(i == 0){
remove_ids[i] = array_size;
}
else {
for(int c = 1; c < i; c++) {
if(remove_ids[c] == t) {
i--;
break;
}
}
}
}
return(remove_ids);
}
输出:
t=1 , v=1
t=81 , v=1
t=81 , v=65
t=65 , v=17
t=17 , v=65
t=17 , v=65
t=1 , v=65
如果我调用 eraser(5)
我会陷入无限循环。
有趣的是,程序中的另一个函数 rand() 功能完美。
我想你想要 % (mod) 而不是 &(按位与)。
我有一个函数可以生成 x(参数)个随机数,删除重复项,并且 returns 将值存储在数组中。
我正在使用 rand() 来调用随机数,但是如果我调用 x 参数设置为 5 的函数,它会变成一个无限循环,因为 rand() 连续 returns 我是相同的 4 或 5数字。
我只在 main() 中调用过一次 srand()。
int main(void){
srand(time(NULL));
erase = eraser(4);
}
int* eraser(int array_size)
{
array_size++;
int* remove_ids = malloc(sizeof(int*) * array_size);
int t, v;
int i;
for(i = 0; i < array_size; i++) {
t = 1+(rand() & 80);
v = 1+(rand() & 80);
printf("t=%d , v=%d\n", t, v);
remove_ids[i] = t;
if(i == 0){
remove_ids[i] = array_size;
}
else {
for(int c = 1; c < i; c++) {
if(remove_ids[c] == t) {
i--;
break;
}
}
}
}
return(remove_ids);
}
输出:
t=1 , v=1
t=81 , v=1
t=81 , v=65
t=65 , v=17
t=17 , v=65
t=17 , v=65
t=1 , v=65
如果我调用 eraser(5)
我会陷入无限循环。
有趣的是,程序中的另一个函数 rand() 功能完美。
我想你想要 % (mod) 而不是 &(按位与)。