Menggunakan rand() untuk Menjana Nilai Rawak Benar Dalam Fungsi
Dalam C , menggunakan rand() untuk menjana nombor rawak dalam satu fungsi boleh menghasilkan nilai berulang. Isu ini timbul apabila srand() berulang kali dipanggil sebelum setiap panggilan ke rand().
Masalah:
Pertimbangkan contoh yang anda berikan:
string PullOne() { string pick; string choices[3] = {"BAR", "7", "cherries"}; std::srand(time(0)); pick = choices[(std::rand() % 3)]; return pick; }
Apabila memanggil PullOne() beberapa kali dari dalam main(), anda menjangkakan nilai rawak yang berbeza untuk pull_1, tarik_2, dan tarik_3. Walau bagaimanapun, anda secara konsisten memperoleh hasil yang sama.
Penyelesaian:
Untuk membetulkannya, alihkan seruan srand() di luar fungsi dan tempat PullOne() ia sekali pada permulaan program anda. Dengan berbuat demikian, anda memulakan penjana nombor rawak sekali, memastikan urutan yang benar-benar rawak dihasilkan untuk panggilan rand() berikutnya.
// srand() is now called only once, at program initialization. int main() { std::srand(time(0)); string pull_1, pull_2, pull_3; pull_1 = PullOne(); pull_2 = PullOne(); pull_3 = PullOne(); return 0; }
Penjelasan:
srand () menetapkan benih untuk penjana nombor rawak. Apabila benih yang sama digunakan berulang kali, penjana menghasilkan urutan yang sama. Dengan memulakan srand() sekali, seed adalah konsisten sepanjang program, membawa kepada output yang boleh diramal dan bukan rawak daripada rand().
Oleh itu, adalah penting untuk memanggil srand() sekali sahaja, sebaik-baiknya semasa program permulaan atau pada permulaan proses penjanaan nombor rawak. Ini memastikan penjanaan nombor yang benar-benar rawak dalam fungsi anda.
Atas ialah kandungan terperinci Mengapa Menggunakan `srand()` berulang kali dalam Fungsi C Membawa kepada Keputusan Bukan Rawak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!