C dilinde rand() fonksiyonunun düzgün kullanımı

Evet, merhabalar.

Bugünkü bloguma hoş geldiniz.

Bugün sizlere C dilinde yazdığınız programda rand() fonksiyonunun neden düzgün çalışmadığını elimden geldiğince anlatacağım.

rand() fonksiyonu, yapısı itibarıyla, sadece bir defa rastgele sayı üretir.

Örneğin bir zar atma programı yapalım:

C:
#include <stdio.h>
#include <stdlib.h>

int main(){
    

    int zar = 1+(rand()%6); //Zarımız 6 yüzlü olmalı. Ayrıca 0'dan başlayacağı için ve 0 yüzlü bir zar olmadığı için "1+" ifadesini başına yazdım.
    printf("Zar: %d\n",zar);
    
    return 0;
}

Programımızın çıktısı şöyle olacaktır:

(stdlib.h dosyasını eklemeyi unuttuğum için uyarı verdi. )

Gördüğünüz gibi, programımız hep rastgele olarak ürettiği 2 sayısını veriyor. Ne kadar fazla çalıştırsak ta. Bunu değişitirmenin tek yolu yeniden derlemek (mi acaba).


İşte bugünkü blogumuzun konusu da bu. Bu 2 sayısını her saniye sürekli olarak başka sayılarla değiştireceğiz.

Bu işlem için srand() fonksiyonunu ve time.h kütüphanesinin sağladığı UNIX saati olanaklarını kullanacağız. UNIX saati, her saniye, kendi değeri üzerine 1 ekleyerek ilerler. Ve böylece her saniye değiştirmiş oluruz.

Hemen kodumuzu tamir edelim.


C:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(){
    srand(time(NULL));
    int zar = 1+(rand()%6);
    printf("Zar : %d\n",zar);



    return 0;
}

Ve de çıktısını şimdi görelim:



Görmüş olduğunuz gibi, istediğimiz şekilde çalıştı. Mutlu son!




Bu blogu Deitel'ın "C ile Programlama" kitabından (İngilizce) okudum. Biraz düzenleyip, size sunmuş bulunmaktayım. Türkçe çevirisini satan sitelerde bu kitabı bulabilirsiniz. Gayet güzel ve tavsiye edebileceğim bir kitaptır.

Yorumlar

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

3rd party gelistiricilerinin sadece bu konu amacli yaptigi libraryleri ya da Boost'u kullanabilirsin.
 
C++'ta zaten random kütüphanesini kullanmaktayım ama C dilinde de 3.parti geliştiricilerin yazdığı kütüphaneleri kullanabilirim. Teşekkürler.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…