Ir para conteúdo
Fórum Script Brasil
  • 0

[Dúvida] Esconder o número escolhido


EduardoFerreira

Pergunta

Bom dia galera,

estou fazendo um programa em que o jogador deverá digitar um número de 0 a 100, esse número tem que ficar OCULTO. Caso o número não esteja nesse

intervalo, o programa deverá solicitar um novo número para o primeiro jogador.

Uma vez escolhido o número, o primeiro jogador deverá entrar com o total de

“chutes” N que o segundo jogador terá direito. O valor de N deve ser um inteiro

positivo e não deve ser menor do que 5. Caso o número não esteja nesse

intervalo, o programa deverá solicitar um novo número N para o primeiro

jogador

mas estou com uma dúvida. Para esconder o número que o jogador 1 digitar,

posso usar algo parecido com isso correto?: daí apenas quando ele apertar o ENTER que é lido o valor, porque sem

o while ele pega apenas um caractere do teclado.

while ((ch != '\r'))

{

ch = getch();

}

se isso estiver certo como eu poderia fazer uma comparação com esse valor lido pelo getch? Quando tento algo parecido com isso

ele não faz a comparação se está certo:

printf("Digite seu chute\n");

scanf("%d", &chute);

if(chute==ch){

printf("Certa resposta\n");}

Me recordo que tinha um comando diferente para isso que quero, ifschar <<<< algo assim.

Alguém sabe?

OBS: Isso são só exemplos entenderem minha dúvida.

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Olá Eduardo.

Tem um problema no seu codigo.

while ((ch != '\r'))

{

ch = getch();

}

Supondo que ch seja do tipo char quando você faz ch = getch() está recebendo o codigo ASCII da tecla pressionada, por exemplo:

Se digitar 123 o ch vai ter apenas o valor 0x33 (51 decimal) que corresponde ao codigo ASCII (em hexa) do caracter '3'.

E quando pressionar o ENTER ch vai ter o valor 0x0D ou 13 em decimal que corresponde ao codigo ASCII do ENTER.

Quando ch for igual ENTER ('\r') ele encerra o whille.

Ai você faz um scanf("%d", &chute) e compara com ch, nesse ponto você está comparando o seguinte:

Supondo que o usuario digitou 45 seu if será: if (45 == 13) que resultará em FALSO.

Vou enviar um codigo pra você analisar.

Qualquer dúvida é só postar.

Abs


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <mem.h>

void main()
{
char numero[10];
char tecla;
int chute;
int i = 0;

// preenche o array numero com zeros
memset(numero, 0, sizeof(numero));

tecla = 0;
printf("Digite um numero e pressione <ENTER> para finalizar\n");
while (tecla != '\r')
{
tecla = getch();
if (isdigit(tecla)) // verifica se a tecla digitada é um numero (0 a 9)
numero[i++] = tecla; // salva o valor digitado em numero na posicao indicada por i eincrementa i
}
printf("Digite um valor: ");
scanf("%d", &chute);
if (chute == atoi(numero)) // atoi converte uma string para int
printf("Confere\n");
else
printf("não Confere\n");

getch();
}
[/codebox]

Link para o comentário
Compartilhar em outros sites

  • 0

CPP

VLW mesmo cara, vou tentar fazer aqui, porque estou no começo do curso e tenho que fazer o programa como se eu ainda não tivesse aprendido arrays (se você puder me ajudar falando como faz essa parte sem arrays agradeço). e também nesse programa pede mais um tanto de coisa, se if faça isso, senão isso, enquanto isso blá blá...

o comando que eu estava procurando era exatamente esse isdigit

se colocar apenas o

if(chute==ch){

printf("Certa resposta\n");} não dá certo né?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, eu particularmente discordo da questão de usar apenas o que se aprende no curso.

Desde que você saiba o porque das coisas acho valido usar tudo.

Mas, sem arrays você pode fazer um scanf("%d", &numero); e depois chamar clrscr(); pra limpar a tela e deixar seguir o fluxo.

O problema é que os dois usuarios não podem estar na frete do micro nesse momento.

A funcao isdigit() apenas testa se um caracter é um digito entre 0 e 9, ela não faz nenhuma conversão.

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw CPP

vou tentar fazer o jogo aqui com o que você me ensinou, o professor tem que ser muito careta se n aceitar o array.

qualquer dúvida posto aqui

eu apenas n entendi essa parte do código:

numero[i++] = tecla; // salva o valor digitado em numero na posicao indicada por i e incrementa i

Link para o comentário
Compartilhar em outros sites

  • 0

galera tenho outro problema aqui que não consigo resolver

o numero não pode ser menor que 0 ou maior que 100. já tentei de várias formas, while... if etc. ele sempre passa pro proximo comando do programa mesmo se o numero for negativo ou maior do que 100.

int main(){

char numero[10];

char tecla=0;

int chute, tentativa, i=0;

do{

printf("Digite um numero de 0 a 100\n");

while (tecla != '\r' )

{

tecla = getch();

if (isdigit(tecla))

numero[i++] = tecla;

}

}while(tecla<0);

//ou if(tecla<0||tecla>100){

// printf("Digite um numero de 0 a 100\n");

// while (tecla != '\r' ){

// tecla = getch();

// if (isdigit(tecla))

// numero[i++] = tecla;}}

por causa desse problema também se na hora de pedir o numero o usuario apertar enter sem digitar qualquer numero, ele passa pro proximo comando pedindo a quantidade de chutes que o jogador terá

Editado por EduardoFerreira
Link para o comentário
Compartilhar em outros sites

  • 0

do{

memset(numero, 0, sizeof(numero));

i = 0;

printf("Digite um numero de 0 a 100\n");

while (tecla != '\r' )

{

tecla = getch();

if (isdigit(tecla))

numero[i++] = tecla;

}

}while(atoi(numero) < 0 || atoi(numero) > 100);

Link para o comentário
Compartilhar em outros sites

  • 0

vlw denovo pela ajuda CPP

+ n esta dando certo, por exemplo digito 102

na tela aparece Digite um numero de 0 a 100 + n le o numero cai direto no printf para digitar o total de chutes, fica assim:

Digite um numero de 0 a 100

//aqui ele n le o numero, cai direto pro 2º printf

Digite o total de chutes que o jogador 2 terá

Link para o comentário
Compartilhar em outros sites

  • 0

Galera meu código tem um problema.

Quando pede para digitar um número, se eu apertar ENTER antes de digitar qualquer número ele cai pro segundo printf. Porque lá no código tá quando ele apertar ENTER sai do while né. Teria algum jeito dele não aceitar eu apertar ENTER antes de apertar qualquer número?

printf("DIGITE UM NUMERO DE 0 A 100 \n\n\n ");

while (tecla != '\r' )

{

tecla = getch();

if (isdigit(tecla) || tecla=='-')

numero[i++] = tecla;

}

}while(atoi(numero) < 0 || atoi(numero) > 100);

do{

printf("\n\n\n\nDIGITE O TOTAL DE CHUTES QUE O JOGADOR 2 DEVE TER \n\n O VALOR DEVE SER DE NO MINIMO 5 \n");

scanf("%d", &chute);

}while(chute<5);

system ("cls");

... ... ...

e a única parte do código que eu não entendi foi essa:

numero[i++] = tecla;

Teria como alguém me explicar?

OBRIGADO.

Link para o comentário
Compartilhar em outros sites

  • 0

Pra não aceitar o enter sem ter digitado um numero antes:


while (tecla != '\r' )
{
tecla = getch();
if (tecla == '\r' && i == 0)
tecla = 0;
if (isdigit(tecla) || tecla=='-')
numero[i++] = tecla;
}
}while(atoi(numero) < 0 || atoi(numero) > 100);
[/codebox]

numero é um array do tipo char, supondo que o conteudo dela seja "Teste 123" se fizer:

numero[5] = '-'; você muda o conteudo para "Teste-123" porque escreveu na posição 6 da string;

Um array em C sempre começa em 0, então a indexação seria:

0 1 2 3 4 5 6 7 8 9 10 (indice)

T e s t e - 1 2 4 (conteudo)

Quando você faz numero[i++] está indicando a posição pelo valor de i.

Deu pra entender?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...