Isu Permulaan Rawak dalam Panggilan Fungsi
Dalam C , fungsi rand() biasanya digunakan untuk menjana nombor rawak. Walau bagaimanapun, apabila dipanggil berulang kali dalam satu fungsi, ia boleh menghasilkan urutan yang boleh diramal dan bukannya rawak sebenar. Tingkah laku ini boleh menyusahkan apabila memerlukan berbilang nilai rawak unik.
Untuk membetulkan isu ini, anda harus mengelak daripada memulakan srand() penjana rawak sebelum setiap panggilan rand(). Sebaliknya, ia perlu dilakukan sekali sahaja, sebaik-baiknya pada permulaan program.
Penjelasan Masalah
Sebab bagi urutan yang tidak dapat diramalkan ialah srand() menyemai penjana rawak dengan nilai tertentu. Panggilan seterusnya dalam fungsi yang sama akan menggunakan benih yang sama, membawa kepada urutan nombor rawak yang konsisten. Dengan memulakan penjana sekali sahaja, ia memastikan bahawa benih unik digunakan untuk keseluruhan program.
Kod Disemak:
int GenerateRandomNumber() { static bool srand_initialized = false; if (!srand_initialized) { srand(time(0)); // Initialize random generator once srand_initialized = true; } return rand() % 3; }
Dalam kod yang dikemas kini ini, srand () dimulakan sekali sahaja sebelum panggilan pertama ke GenerateRandomNumber(). Ini memastikan bahawa setiap panggilan menghasilkan nilai yang benar-benar rawak.
Atas ialah kandungan terperinci Mengapa Penggunaan `rand()` Berulang dalam C Menghasilkan Jujukan Boleh Diramal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!