EduardoFerreira Posted April 5, 2012 Report Share Posted April 5, 2012 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 jogadormas 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 semo 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 issoele 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. Quote Link to comment Share on other sites More sharing options...
0 CPP Posted April 5, 2012 Report Share Posted April 5, 2012 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] Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 5, 2012 Author Report Share Posted April 5, 2012 CPPVLW 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 isdigitse colocar apenas o if(chute==ch){printf("Certa resposta\n");} não dá certo né? Quote Link to comment Share on other sites More sharing options...
0 CPP Posted April 5, 2012 Report Share Posted April 5, 2012 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. Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 5, 2012 Author Report Share Posted April 5, 2012 Vlw CPPvou 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 aquieu 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 Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 5, 2012 Author Report Share Posted April 5, 2012 (edited) galera tenho outro problema aqui que não consigo resolvero 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 April 5, 2012 by EduardoFerreira Quote Link to comment Share on other sites More sharing options...
0 CPP Posted April 5, 2012 Report Share Posted April 5, 2012 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); Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 5, 2012 Author Report Share Posted April 5, 2012 vlw denovo pela ajuda CPP+ n esta dando certo, por exemplo digito 102na 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º printfDigite o total de chutes que o jogador 2 terá Quote Link to comment Share on other sites More sharing options...
0 CPP Posted April 5, 2012 Report Share Posted April 5, 2012 Posta o código ou manda pra mim por email: osantos@smartnet.com.br Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 5, 2012 Author Report Share Posted April 5, 2012 te mandei por email Quote Link to comment Share on other sites More sharing options...
0 CPP Posted April 5, 2012 Report Share Posted April 5, 2012 já respondi Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 5, 2012 Author Report Share Posted April 5, 2012 Muitíssimo obrigado , me ajudou demais! Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 6, 2012 Author Report Share Posted April 6, 2012 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. Quote Link to comment Share on other sites More sharing options...
0 CPP Posted April 6, 2012 Report Share Posted April 6, 2012 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? Quote Link to comment Share on other sites More sharing options...
0 EduardoFerreira Posted April 8, 2012 Author Report Share Posted April 8, 2012 Muito obrigado mesmo CPPEntendi sim Quote Link to comment Share on other sites More sharing options...
Question
EduardoFerreira
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.