隨機函數在函數內傳回相同的值
您遇到一個問題,即rand() 函數在函數內呼叫時會產生相同的值單一功能。為了解決這個問題,讓我們更深入地研究問題並探索解決方案。
理解問題
函數 PullOne() 使用 std::srand(time (0)) 函式初始化隨機數產生器。此初始化根據當前時間分配種子值。但是,透過在函數內呼叫 srand(),您可以在每次呼叫函數時有效地重置隨機數產生器。這會產生相同序列的隨機數。
解決方案
要在 PullOne() 中產生真正的隨機值,您應該只初始化隨機數產生器一次,在任何函數呼叫之前。這確保了該函數每次呼叫時都會產生唯一的隨機數序列。
要實現此目的,您可以如下修改程式碼:
// Initializing the random number generator std::srand(time(0)); string PullOne() { string pick; string choices[3] = {"BAR", "7", "cherries"}; pick = choices[(std::rand() % 3)]; return pick; }
透過初始化srand()在PullOne() 之外,您確保僅呼叫一次且隨機數產生器已正確播種。此修改可確保每次呼叫 PullOne() 都會產生真正隨機的結果,使 pull_1、pull_2 和 pull_3 具有不同的值。
以上是為什麼我的 rand() 函數在單一函數呼叫中傳回相同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!