2017-12-15 23 views
-2

x (매개 변수) 난수를 생성하고 반복을 제거한 다음 배열에 저장된 값을 반환하는 함수가 있습니다.rand()는 srand() 호출이 하나 뿐이지 만 값을 반복합니다.

rand()를 사용하여 임의의 숫자를 호출합니다. 그러나 x 매개 변수를 5로 설정하여 함수를 호출하면 rand()가 계속 동일한 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); 
} 

는 출력 : 내가 eraser(5)를 호출하면

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 

나는 무한 루프에 박히면서.

흥미롭게도 프로그램의 다른 함수 인 rand()는 완벽하게 작동합니다.

+12

'& 80'은 무엇이라고 생각하십니까? – tkausl

+0

* facepalm * 고마워요! – CallMeTheMan

+3

힌트 :'80 == 0x50 == binary 01010000' – iBug

답변

2

& (비트 및와) 대신 % (mod)가 필요하다고 생각합니다.

+0

감사합니다. 그것은 꽤 바보 같은 실수였습니다. – CallMeTheMan