Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema com a função srand() e rand()

Eu assisti ao curso e também tenho o livro do Aniche que comprei há um tempo atrás na casa do código, voltei a estudar pelo livro pra resolver as questões, portanto, pode ser que não tenha nas aulas em vídeo esse exercício, pelo menos eu não achei. Se alguém puder me ajudar ficarei muito grato, pois já estou há dias tentando arrumar uma solução e no fórum da casa do código infelizmente ninguém me respondeu.

A questão pede o seguinte:

Hoje o jogo escolhe um número entre 0 e 99. Deixe o usuário escolher esse limite. Você precisa capturar esses dois números dele, e usá-los na hora de calcular o número randômico.

Quando rodo o programa, por vezes, ele me dá um nº secreto acima do intervalo que escolhi, por exemplo: Digito um intervalo entre 3 e 6 e o nº secreto gerado é 7, não entendo o porquê.

// Solicitando intervalo entre dois números que o usuário deseja jogar.
printf("Digite o nº de intervalo inicial que deseja jogar: \n");
scanf("%d", &intervaloInicial);

while(1) {
    printf("Digite o nº de intervalo final que deseja jogar: \n");
    scanf("%d", &intervaloFinal);
    // if que criei pra tratar caso o usuário digite intervalos finais menores que os iniciais
    if(intervaloFinal <= intervaloInicial) {
        printf("Erro: O nº final não pode ser menor que o nº inicial. \n");
        printf("Escolha outro nº para o intervalo final.\n");
        continue;
    } else {
        printf("O intervalo escolhido foi entre %d e %d. \n", intervaloInicial, intervaloFinal);
        break;
    }
}
srand(time(0));
int numerosecreto = intervaloInicial + (rand() % intervaloFinal);
printf("O numero secreto é %d \n", numerosecreto);

Agradeço desde já.

2 respostas
solução!

Boa tarde João,

Usando a expressão

int numerosecreto = intervaloInicial + rand() % (intervaloFinal - intervaloInicial);

os valores retornados estarão no intervalo entre intervaloInicial e intervaloFinal - 1, ou seja, se intervaloInicial for igual a 3 e intervaloFinal igual a 6, os possíveis valores retornados serão 3, 4 e 5. Neste caso, valores maiores ou iguais a intervaloFinal nunca ocorrerão, assim como valores menores que intervaloInicial. É importante também garantir que o intervalo inicial não seja negativo.

Entendi amigo, obrigado!