Jump to content
Fórum Script Brasil
  • 0

[Dúvida] Esconder o número escolhido


EduardoFerreira

Question

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 to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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á

Edited by EduardoFerreira
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...