Ir ao conteúdo
  • Cadastre-se
felipeS2

RESOLVIDO Duvida simples, como limitar tentativas

Recommended Posts

Então, sou iniciante em C++, preciso criar um programa que de um valor random de 0 a 100, a pessoa tenta adivinhar esse código em 6 tentativas, se nao conseguir o programa precisa imprimir ERRADO e o NUMERO CERTO.

Pois bem, fiz a maior parte do programa, ja fiz ele dar o numero random e a pessoa digitar o valor, porém nao estou conseguindo limitar em 6 tentativas, como faço isso? Segue meu codigo:

#include <cstdio>

#include <cstdlib>
#include <iostream>
#include <time.h>
 
int main()
{
int r,num;
r = rand()%100;
printf("Rascunho:%d\n",r);
printf("Tente acertar o valor gerado automaticamente, digite um numero inteiro entre 0 e 100: \n");
do
{
scanf("%d",&num);
if (num == r)
printf("Parabens voce acertou\n");
else
{
if (num > r)
printf("Nao acertou, precisa ser menor\n");
else
printf("Nao acertou, precisa ser maior\n");
}
}
while(num!=r);
system("PAUSE");
}

Ele fica em um loop infinito. O que devo fazer para limitar em 6 tentativas e ao exceder isso imprimir ERRADO, O NUMERO CERTO É: X

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Declare uma variável do tipo int com o valor 0.

Aí é só incrementá-la dentro do loop e acrescentar a condição no while

 

while(num != r && i < 6)

Não entendi a parte de colocar a variavel INT com valor 0.

La onde coloquei "int r,num" devo colocar um 0? Ficando "int r,num,0" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei então:

 

int r,num,i=0;

e ja mexi no while, porém ainda continua infinito

 

 

#include <cstdio>

#include <cstdlib>
#include <iostream>
#include <time.h>
 
int main()
{
int r,num,i=0;
r = rand()%100;
printf("Rascunho:%d\n",r);
printf("Tente acertar o valor gerado automaticamente, digite um numero inteiro entre 0 e 100: \n");
do
{
scanf("%d",&num);
if (num == r)
printf("Parabens voce acertou\n");
else
{
if (num > r)
printf("Nao acertou, precisa ser menor\n");
else
printf("Nao acertou, precisa ser maior\n");
}
}
while(num!=r && i < 6);
system("PAUSE");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

#include <cstdio>

#include <cstdlib>
#include <iostream>
#include <time.h>
 
int main()
{
int r,num,i=0;
r = rand()%100;
printf("Rascunho:%d\n",r);
printf("Tente acertar o valor gerado automaticamente, digite um numero inteiro entre 0 e 100: \n");
do
{
scanf("%d",&num);
if (num == r)
printf("Parabens voce acertou\n");
else
{
if (num > r)
printf("Nao acertou, precisa ser menor\n");
else
printf("Nao acertou, precisa ser maior\n");
}
}
while(num!=r && i < 6 && i=i+1);
system("PAUSE");
}

Não compilou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa forma está errada.

Quando eu disse dentro do while, é dentro do bloco while... por exemplo

do{...i = i + 1;}while(num != r && i < 6);
Até dá para incrementar e comprar no mesmo comando, mas não é da forma que você fez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa forma está errada.

Quando eu disse dentro do while, é dentro do bloco while... por exemplo

 

do{...i = i + 1;}while(num != r && i < 6);
Até dá para incrementar e comprar no mesmo comando, mas não é da forma que você fez.

 

Obrigado

 

Obrigado.

Ultima duvida, o codigo final ficou assim: 

 

#include <cstdio>

#include <cstdlib>
#include <iostream>
#include <time.h>
 
int main()
{
system("color e0");
printf("\t\t\t**JOGO DA ADIVINHACAO**\n");
printf("\t\t**FOI GERADO UM NUMERO ENTRE 0 E 100**\n");
printf("\t**voce TEM 6 TENTATIVAS PARA ACERTAR O NUMERO GERADO**\n");
int r,num,i=0;
srand(time(NULL));
r = rand()%100;
printf("\nRascunho: %d\n\n",r);
printf("Digite um numero inteiro entre 0 e 100: ");
do
{
scanf("%d",&num);
if (num == r)
printf("\nParabens voce ACERTOU!!!\n\n");
else
{
if (num > r)
printf("\nNao acertou, precisa ser menor: ");
else
printf("\nNao acertou, precisa ser maior: ");
i++;
}
}
while(num!=r && i < 6);
if (i == 6)
printf("\n\nExcedeu as 6 tentativas, o numero correto era: %d\n\n", r);
system("PAUSE");
}

 

Quando eu faço as 6 alternativas ele aparece uma linha a mais sem nenhum motivo, por que? O programa em si ta funcionando, so nao entendi porque apareceu uma linha a mais. Sabe por que?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso acontece pois o input é no início do loop enquanto o incremento e verificação do valor de i, é no final. Então quando o sexto valor é digitado, o restante do bloco while deve processado pela última vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma alternativa é usar um loop infinito e sair com break logo após o input, aí ficaria assim:

int main(){    int r, num, i = 0;    srand(time(NULL));    r = rand() % 100;    for(;{        printf("Numero[%d]: ", ++i);        scanf("%d", &num);        if(num == r || i >= 6){            if(num != r){                printf("Game Over: O numero correto e %d\n", r);            }else{                puts("Acertou!");            }            break;        }        if(num > r){            puts("Errou: Precisa ser menor");        }else{            puts("Errou: Precisa ser maior");        }    }    return 0;}

Ou você pode colocar um if antes da mensagem de erro, para não exibir nada caso i seja >= 6

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×