C -Rand()重复值,尽管只有一个srand()调用



i具有生成x(参数)随机数,删除重复的函数,并返回存储在数组中的值。

我正在使用rand()调用随机号码,但是,如果我以x参数设置为5的函数,则随着rand()连续返回我的4或5号码,它将变成无限循环。

我只在主()中只称为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=%dn", 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)而不是&amp;(位和)。

相关内容

最新更新