No Curso de C++ nós utilizamos outras técnicas mais complexas, mas que funciona desde o C++11, no entanto, hoje nesse cpp::daily vamos mostrar casos mais simples, mais específicos e mais atuais.
std::rand
, std::time
, std::srand
e std::experimental::randint
std::srand
tem o std::time
(precisa incluir <ctime>
e usa a hora atual como semente para o gerador aleatório) como parâmetro e semeia o gerador de número pseudo-aleatório usado por std::rand()
que por sua vez retorna um valor integral pseudo-aleatório entre 0 e RAND_MAX
, para saber o valor dele basta imprí-lo, exemplo:
Os números randômicos são gerados em tempo de execução, ou seja, cada vez que for executado ou a cada vez que você chamar uma função com valor gerado a partir de
std::rand()
os números serão diferentes, a menos que você remova a linha:std::srand(std::time(nullptr));
ou, no caso da função, se estiver usandostatic
.
Se também quiser números também sem sinais, basta fazer um casting
, exemplo: std::srand(static_cast<unsigned>(time(nullptr)))
, meio inútil, mas só para informar.
Legal saber que podemos limitar o tamnho do número aleatório como no exemplo que usamos: std::rand() % 60
, ou seja, imprime no máximo até 60, mas se quiséssemos uma range entre: 40 e 60, por exemplo ?
Lógico que poderíamos criar uma condição e somar ou subtrair de acordo com o valor do resultado dinamicamente.
Mas isso é um tanto quanto trabalhoso, então entra a tarefa do std::experimental::randint
. Para usá-lo precisamos incluir o cabeçalho <experimental/random>
, exemplo:
Se achar que o nome fica muito grande, tente resumir, ex.:
namespace rd = std::experimental;
e implementar:rd::randint(5,10);
.
Alternativamente você pode usar o std::srand
com time
ZERO: std::srand(time(0));
ou até mesmo sem a resolução de escopo: srand(time(0));
e rand() % num;
, exemplo:
Simples, né?!
Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: