x(パラメータ)乱数を生成し、繰り返しを取り除き、配列に格納された値を返す関数を持っています。rand()はsrand()呼び出しが1つだけあっても値を繰り返す
乱数を呼び出すためにrand()を使用していますが、xパラメータを5に設定して関数を呼び出すと、rand()が同じ4または5の数値を返すため、無限ループになります。
私はsrand()をmain()で一度だけ呼び出しました。
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()は完全に機能しています。
「&80」はどう思いますか? – tkausl
* facepalm *ありがとうございました! – CallMeTheMan
ヒント: '80 == 0x50 == binary 01010000' – iBug