Ir ao conteúdo
  • Cadastre-se

Duvidas com Comando =rand () e Somar


DavidJr

Posts recomendados

Boa Tarde Galera,

Estou fazendo um programa e ele usa o comando =rand().

Ele tem que gerar um numero randomico para eu armazenar em uma variávem.

Mas estou com uma duvida, porque ele sempre gera numeros um perto do outro, como 6054 e dps 6057 e por ai vai.

o comando que estou usando é esse:

srand(time(NULL));

vida = rand()%10000;

printf("Numero Gerado: %d\n",vida);

também ponho o biblioteca #include <time.h> certinho.

Outra Coisa. Para funcionar o que eu quero fazer certinho, estou usando o while junto com o switch e ele tem que chegar em um valor 10 mil, so que como o numero é randomico certamente ele demoraria chegar, com isso gostaria que me dissecem como eu somaria os numeros gerados, se possivel me passem os comandos ou uma apostila para eu poder ler.

Para entenderem melhor o comando é esse:

while (vida = 10000){
printf ("Digite o Numero Para sua Sorte 1 ou 2 \n");
scanf (" %d", &forca);

switch (forca){

case 1:
srand(time(NULL));
vida = rand()%10000;
printf("seu numero é: %d\n",vida);
break;

case 2:
srand(time(NULL));
vida = rand()%5000;
printf("seu numero é: %d\n",vida);
break;
}

}

Agradeço a Ajuda.

Link para o comentário
Compartilhar em outros sites

O problema é que voce está sempre "resetando" a semente, e aí o resultado não vai mudar mesmo. voce só deve chamar a função srand uma unica vez em todo o seu código.

E voce quer que o valor aleatório seja apenas crescente, é isso? Se for, é só somar um valor a cada iteração. vida = vida + rand() % 10000;

Não entendi também que voce fala que quer chegar a 10000, mas esse trecho do código só entra se o valor for exatamente 10000, ou seja, nunca vai entrar nesse trecho... E se voce forçar fora desse trecho, assim que ele entrar uma vez já vai sair...

Teste com esse código e repare a diferença:


srand(time(NULL));
while (vida = 10000){
printf ("Digite o Numero Para sua Sorte 1 ou 2 \n");
scanf (" %d", &forca);

switch (forca){

case 1:
vida = rand()%10000;
printf("seu numero é: %d\n",vida);
break;

case 2:
vida = rand()%5000;
printf("seu numero é: %d\n",vida);
break;
}

}

Quanto a somar os valores, voce pode criar uma variável que vai

Link para o comentário
Compartilhar em outros sites

Bem, primeiramente saiba que a biblioteca é stdlib.h e não time.h.

Segundo, para somar os números, use uma variavel global ou uma variavel em main e passe seu endereço(ponteiro) como parametro para que possa ser alterado o valor dentro dessa função ou ainda existe um modificador de tipo em C que eu esqueci agora que faz com que uma variavel não perca seu valor entre chamadas de função

Link para o comentário
Compartilhar em outros sites

Bem, primeiramente saiba que a biblioteca é stdlib.h e não time.h.

Segundo, para somar os números, use uma variavel global ou uma variavel em main e passe seu endereço(ponteiro) como parametro para que possa ser alterado o valor dentro dessa função ou ainda existe um modificador de tipo em C que eu esqueci agora que faz com que uma variavel não perca seu valor entre chamadas de função

A time.h contem sim instruções pra trabalhar com tempo e servir de semente pro numero aleatório.

Link para o comentário
Compartilhar em outros sites

Ghost Killer,

Quando eu falei ke queria chegar ate 10000 eu quis dizer que o limite para o switch parar e dar continuidade no resto do programa seriam os 10000, como se fosse um jogo em que você tem que atacar até chegar em um limite a vida do seu oponente, seria +/- isso o que eu quero. E a Parte que você me passou ajudou, também está no que eu precisava, agora os numeros Randomicos estão ficando longes um dos outros.

Agradeço a Ajuda de todos ate o momento.

Link para o comentário
Compartilhar em outros sites

Ghost Killer,

Quando eu falei ke queria chegar ate 10000 eu quis dizer que o limite para o switch parar e dar continuidade no resto do programa seriam os 10000, como se fosse um jogo em que você tem que atacar até chegar em um limite a vida do seu oponente, seria +/- isso o que eu quero. E a Parte que você me passou ajudou, também está no que eu precisava, agora os numeros Randomicos estão ficando longes um dos outros.

Agradeço a Ajuda de todos ate o momento.

Sim, eu imaginei que fosse isso, mas leia seu código. A condição do While não está verificando valor nenhum, está setando o valor. Além disso, não é pra enquanto for igual a 10000 e sim enquanto for menor que 10000 (se for maior morre).

Link para o comentário
Compartilhar em outros sites

Certo, mas então ficaria so o

srand(time(NULL));

while (vida <= 10000){

printf ("Digite o Numero Para sua Sorte 1 ou 2 \n");

scanf (" %d", &forca);

ate ai tudo bem, mas eu gostaria de saber como eu somaria os numeros gerados randomicamente que estão guardados na variavel "vida", pois ja que eu pretendo colocar um limite de 10000 para o numero randomico e 5000 para o outro, seria praticamente "impossivel" chegar aos 10 mil sem somar.

Não sei se esclarece a Duvida mas ate agora agradeço muito mesmo.

Abraços

Link para o comentário
Compartilhar em outros sites

aí valeu pela Ajuda ate agora. eu fiz o Seguinte. Deu certo:

case 1:

vida = vida + rand()%7000;

printf("seu numero é: %d\n",vida);

break;

So mais uma coisa agora; Como eu faço para mostrar o Valor que o Numero randomico Gerou já que ele nao é uma Variavel?

Agradeço a Ajuda de Todos!!!

Link para o comentário
Compartilhar em outros sites

aleatorio = rand()%7000;

vida = vida + aleatorio;

printf("o resultado aleatorio foi: %d\n",aleatorio);

printf("seu numero e: %d\n",vida);

Cara, recomendo seriamente que voce estude mais lógica de programação e depois uns códigos simples antes de continuar com esse jogo que voce tá fazendo. voce está com pouca base.

[]'s e bom estudo.

Link para o comentário
Compartilhar em outros sites

Obrigado, eu estou começando agora a Faculdade, e estou fazendo ele conforme eu vou adquirindo novos conhecimentos. Só queria encrementar ele com o comando Randon para ficar mais parecido com a realidade. :D

Mas estou indo bem até agora.

Agradeço a Ajuda até o Momento!!!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...