Rumah > pembangunan bahagian belakang > C++ > Mengapa Penggunaan `rand()` Berulang dalam C Menghasilkan Jujukan Boleh Diramal?

Mengapa Penggunaan `rand()` Berulang dalam C Menghasilkan Jujukan Boleh Diramal?

Susan Sarandon
Lepaskan: 2024-12-25 15:55:17
asal
458 orang telah melayarinya

Why Does Repeated `rand()` Usage in C   Produce Predictable Sequences?

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan