Ir para conteúdo

POWERED BY:

Arquivado

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

Renato Ramos

Bloquear o uso de letras em C++

Recommended Posts

Olá!

 

eu comecei a "brincar" com o DEV C++, mais ou menos uma semana, e comecei com coisas simples, por explos calcular areas de formas geometricas regulares. ai eu fui mostrar pra um amigo meu mais experiente e ele entrou com letras onde era pra entrar com números e é claro que o programa deu erro...

 

já procurei pela net e não encontrei... existe um meio de bloquear o uso de letras em C++??

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom você pode fazer if's falando quais caracteres q o programa aceita.

usa a tabela ascii.

 

eu dei uma fuçada no forum e achei uma parte do código do nosso amigo Myho no jogo da forca dele.

ve como q faz.

if (((resp[i] >= 48) && (resp[i] <= 57)) || (resp[i] == 13) || (resp[i] == 8))
		  { 
	///comando
		  }
veja c te ajuda.

da uma estudada e volte a postar c tiver duvidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara ressuscitei o tópico pq achei algo interessante para bloquear outros caracteres..

 

isalpha(x)---- Verdadeiro se x é uma letra de A-Z ou a-z

isupper(x)---- Verdadeiro se x é uma letra maiúscula A-Z

islower(x)---- Verdadeiro se x é uma letra minúscula a-z

isdigit(x)---- Verdadeiro se x é um numero de 0-9

isalnum(x)---- Verdadeiro se x é uma letra de A-Z, a-z, e um numero de 0-9

 

ex. simples de um programa q verifica c o caracter é uma letra ow numero..

 

#include <iostream> //caso use o C, inclua no lugar do iostream as bibl. stdio.h e ctype.h
#include <conio.h>
main()
{
  char letra;
  printf("Digite uma letra ou numero: ");
  scanf ("%c",&letra);
  if (isalnum(letra)) printf("Correto");
  else printf("Errado");
getch();
}

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

quit, testei esse código aqui, muito estranho velho, as vezes funciona as vezes nao...coloquei um fflush ali pra ver se era lixo, mas nao adianto...funciona de boa ae ?? as vezes da erro de execução quando digito o caracter..

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara eu acho q as vzs naum funciona pq ele verifica um caracter soh naum a string toda! naum cheguei a fazer o teste + creio q seja isso!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que não é isso, pois testei digitando só um caracter. A primeira vez ele executa beleza, depois da pau "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que encontrei o erro, a variável a ser verificada deve obrigatóriamente ser do tipo char ??

estava testando com a variável do tipo int e estava dando errado, agora com char funcionou :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

isis, esse:

((int)C)
força o char a se tornar int ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso retorna o ascii do char, pq pra transformar tem q usar a função atoi();

Compartilhar este post


Link para o post
Compartilhar em outros sites

não intendi pq retornar o ASCII do char "/

pois dessa forma funciona perfeitamente:

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

int main(void)
{
	char num;
	do{
		printf("Digite um numero: ");
		scanf("%c",&num);
		fflush(stdin);
	}while(!isdigit(num));
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, eu usei isso em meu programa em C, (serve para cpp também) baseado no que a import java.Isis postou:

do {

scanf("%c",&digitado);

} while (!isalnum((int)digitado));

Onde "digitado" é a variável que você armazenou o que foi digitado.

Este trecho apresenta dois pequenos problemas:

1. Se você der opções para o usuário (ex.: tecle 1 para fazer isso ou 2 para fazer aquilo), você não pode utilizar no loop if...else if 1 e 2 para ver o que o usuário digitou, você tem que utilizar o código ASCII, por exemplo, esta é a forma errada:

char digitado;

printf ("Entre com 1 para fazer isso e 2 para fazer aquilo");

scanf("%c",&digitado);

} while (!isalnum((int)digitado));

if (digitado == 1) // Errado, pois acima você pediu para armazenar na variável digitado o valor ASCII do que o usuário digitou.

{

Faça isso

}

else if (digitado == 2)

{ Faça aquilo

}

o correto seria, no lugar de "if (digitado == 1)" colocar "if (digitado == 49)" e 50 no lugar de 2.

2. Caso você coloque alguma mensagem de erro caso o usuário digitar uma palavra, a mensagem vai se repetir (juntamente com o menu, caso ouver) no mesmo número de vezes do que a palavra que foi digitada. Isso é porque %c lê uma letra de cada vez.

 

Espero ter ajudado,

 

TTS

Compartilhar este post


Link para o post
Compartilhar em outros sites

o correto seria, no lugar de "if (digitado == 1)" colocar "if (digitado == 49)" e 50 no lugar de 2.

 

Quando tiver grana vou pagar um estagiario pra ficar trocando os codigos ascii do meu programa...

 

if (digitado == '1')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, não me lembrava mais disto!!! Putz, e pensar que li um monte sobre manipulação de strings... Só para lembrar, Renato Ramos, use sempre aspas simples, neste caso . Lembro de, uma vez, ter usado aspas duplas, o programa travava e não funcionava como eu queria. Levei uma bronca de um amigo meu porque eu ignorei os warnings do compilador :(.

Compartilhar este post


Link para o post
Compartilhar em outros sites
TTS nesse caso, não seria melhor usar atoi(); ao invés de código ASCII ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.