首頁 >後端開發 >C++ >為什麼我的 rand() 函數在單一函數呼叫中傳回相同的值?

為什麼我的 rand() 函數在單一函數呼叫中傳回相同的值?

Susan Sarandon
Susan Sarandon原創
2024-12-25 11:37:071005瀏覽

Why Does My rand() Function Return Identical Values Within a Single Function Call?

隨機函數在函數內傳回相同的值

您遇到一個問題,即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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn