Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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++??
Obrigado!..
vo dar uma pesquisada... se tiver alguma duvida .. ja sei onde encontrar ajuda!!
:D
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();
}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..
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
acho que não é isso, pois testei digitando só um caracter. A primeira vez ele executa beleza, depois da pau "/
mostra como fico seu programa!
[]'s
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
do {
scanf("%c",&C);
} while (!isdigit((int)C));isis, esse:
((int)C)força o char a se tornar int ??
Retorna o ASCII do char.
isso retorna o ascii do char, pq pra transformar tem q usar a função atoi();
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));
}Funciona porque é um casting implícito p/ int.
não intendi o que quis dizer "/
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
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')
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 :(.
TTS nesse caso, não seria melhor usar atoi(); ao invés de código ASCII ??
se a conversao eh automatica, pra que chamar uma funcao?
aff esqueça, esse TTS me confundiu, não percebi que se tratava de char '1' :(
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.