함수 호출 내 무작위 초기화 문제
C에서는 일반적으로 rand() 함수를 사용하여 난수를 생성합니다. 그러나 단일 함수 내에서 반복적으로 호출되면 실제 무작위성 대신 예측 가능한 시퀀스가 생성될 수 있습니다. 이 동작은 여러 개의 고유한 무작위 값이 필요할 때 문제가 될 수 있습니다.
이 문제를 해결하려면 각 rand() 호출 전에 무작위 생성기 srand()를 초기화하지 않아야 합니다. 대신, 프로그램 시작 시 한 번만 수행하는 것이 좋습니다.
문제 설명
예측할 수 없는 시퀀스의 이유는 srand()가 특정 값을 가진 무작위 생성기. 동일한 함수 내의 후속 호출은 동일한 시드를 사용하여 일관된 난수 시퀀스를 생성합니다. 생성기를 한 번만 초기화하면 전체 프로그램에 고유한 시드가 사용됩니다.
수정된 코드:
int GenerateRandomNumber() { static bool srand_initialized = false; if (!srand_initialized) { srand(time(0)); // Initialize random generator once srand_initialized = true; } return rand() % 3; }
이 업데이트된 코드에서 srand ()는 GenerateRandomNumber()를 처음 호출하기 전에 한 번만 초기화됩니다. 이렇게 하면 각 호출이 실제로 임의의 값을 생성하게 됩니다.
위 내용은 C에서 반복되는 `rand()` 사용이 예측 가능한 시퀀스를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!