Rumah >pembangunan bahagian belakang >C++ >Mengapa Fungsi rand() Saya Mengembalikan Nilai Yang Sama Dalam Satu Panggilan Fungsi?
Fungsi Rawak Mengembalikan Nilai Identik dalam Fungsi
Anda menghadapi masalah di mana fungsi rand() menjana nilai yang sama apabila dipanggil dalam fungsi tunggal. Untuk menyelesaikan masalah ini, mari kita mendalami isu ini dan terokai penyelesaiannya.
Memahami Isu
Fungsi PullOne() menggunakan std::srand(time (0)) berfungsi untuk memulakan penjana nombor rawak. Inisialisasi ini memberikan nilai benih berdasarkan masa semasa. Walau bagaimanapun, dengan memanggil srand() dalam fungsi, anda secara berkesan menetapkan semula penjana nombor rawak setiap kali fungsi dipanggil. Ini menghasilkan urutan nombor rawak yang sama dihasilkan.
Penyelesaian
Untuk menjana nilai rawak yang benar-benar rawak dalam PullOne(), anda harus memulakan penjana nombor rawak sekali sahaja , sebelum mana-mana panggilan fungsi. Ini memastikan bahawa fungsi menjana urutan unik nombor rawak setiap kali ia dipanggil.
Untuk mencapai ini, anda boleh mengubah suai kod anda seperti berikut:
// 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; }
Dengan memulakan srand() di luar PullOne(), anda memastikan ia dipanggil sekali sahaja dan penjana nombor rawak disemai dengan betul. Pengubahsuaian ini memastikan bahawa setiap panggilan ke PullOne() menghasilkan hasil yang benar-benar rawak, menjadikan nilai pull_1, pull_2 dan pull_3 berbeza.
Atas ialah kandungan terperinci Mengapa Fungsi rand() Saya Mengembalikan Nilai Yang Sama Dalam Satu Panggilan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!