Rumah > pembangunan bahagian belakang > C++ > Mengapa Menggunakan `srand()` berulang kali dalam Fungsi C Membawa kepada Keputusan Bukan Rawak?

Mengapa Menggunakan `srand()` berulang kali dalam Fungsi C Membawa kepada Keputusan Bukan Rawak?

Mary-Kate Olsen
Lepaskan: 2024-12-30 08:49:09
asal
288 orang telah melayarinya

Why Does Repeatedly Using `srand()` in a C   Function Lead to Non-Random Results?

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

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

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!

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