Rastgele olmak yani random aslında pek de kolay değil, bu sebeple pseudo random, true random gibi kalıplar hayatımızda yer alıyor. Vereceğim örnekler sözde rastgele (: olan pseudo random a aittir. Gerçek rastgelelik tabii ki pek mümkün değil ancak güvenli rastgelelik mümkün, onun için buradaki gibi basit kütüphaneleri kullanmak değil, başkaları ile şifreleme yapmanızı tavsiye ederim. Zira kullanıcı bazlı özel rastgele sayılar üretmek istiyorsanız yapacağımız gibi yem olarak sadece zamanı kullanmak pek güvenli değildir.
Rastgele sayı elde etmek için rand() fonksiyonunu kullanacağız. Ancak önce bunun için srand() fonksiyonunu yem olarak kullanması için parametre ile çağırmalıyız. Eğer bunu yapmazsanız, kendiliğinden 1 ile beslenmiş gibi çalışır:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(NULL));
birOnArasinda = rand() % 10 + 1;
birYuzArasinda = rand() % 100 + 1;
printf ("Rastgele Sayi: %d\n", birOnArasinda);
return 0;
}
Tabii ki sayılar ve rakamlardan oluşan rastgele ya da tekrar eden rastgele yazı (string) oluşturmak için başka yollar da söz konusu ama işinizi görebilecek kısa bir yolu şu:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
static const string karakterListesi = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
srand(time(NULL));
string rastgeleHarflerSayilar = "";
for(int i = 0; i < 16; i++) {
rastgeleHarflerSayilar += karakterListesi[rand() % karakterListesi.size()];
}
cout << "Rastgele Sayi: " << rastgeleHarflerSayilar << endl;
return 0;
}
Görebileceğiniz üzere, içerisinde olmasına izin verdiğim her karakteri karakterListesi adlı bir listeye attım. Daha önceden zaman ile yemlediğim rand() fonksiyonu ile de bu listenin sayısını üst sınır alarak rastgele sayılar elde ettim. Bu işlemi sonuçta olmasını istediğim yazı kaç karakterli olacaksa o kadar tekrar etsin diye de for döngüsü içine aldım. Sonra da sonucu yazdırdım. Dediğim gibi tabii ki isterseniz srand() ı başka değerler ile de yemleyebilirsiniz ancak bu işlemi güvenlik amaçlı bir değer olarak kullanacaksanız başka kütüphaneleri kullanmanızı tavsiye ederim.