Eu conheço a função isdigit e outras derivadas do ctype.h, mas elas não funcionam em meu programa ! Alguém ai descobriu uma lógica eficaz que impede isso ?
De um exemplo em código por favor.
Na verdade quando o usuário digita um caractere o C entende como int pelo código ASC do caractere
[code]
#include <stdio.h>
int main ()
{
char letra;
int codigo_letra;
printf("Digite uma letra: ");
codigo_letra = getchar(); // letra c
letra = codigo_letra;
printf("Letra: %c \nCódigo da letra: %d", letra, codigo_letra); // Letra: c - código: 99
}[/code]
[code]
#include <stdio.h>
int main ()
{
int codigo_letra;
printf(“Digite uma letra: “);
scanf(”%d”, &codigo_letra); // 99
printf("Letra: %c - Código Letra: %d", codigo_letra, codigo_letra); // Letra: c - Código: 99
}[/code]
Você pode fazer outra coisa. Você lê o número como uma cadeia de caracteres (char), ignorando letras, ao ler. Depois basta fazer o cast para uma variável inteira. Para ignorar letras, na leitura, faça isso:
/* ignora tudo de a à z */
scanf("%[^a-z]s",&variavel);
#Andre Rosa
Tentei fazer da forma como disse.
char Cpessoas;
int pessoas
printf("Digite o numero de pessoas: ");
scanf("%[^a-z]s",&Cpessoas); // Quando se digita um numero aqui nada acontece
pessoas = (int) Cpessoas;
#renamed
eu estou usando o compilador dev c ++, quando o usuário guarda um caracter em um int, o programa da erro e fecha.
Vou mandar parte de meu código para voces darem uma olhada:
int pessoas;
printf("Digite a quantidade de pessoas: ");
scanf("%i", &pessoas);
// daqui em diante, é coletado cpf, idade, nome, outros, então todas as matrizes que crio é com o tamanho pessoas. Acho que e por isso que o programa da erro.
Acho que sempre dará erro porque, em qualquer caso, o usuário pode digitar sasdasdads, que não é um inteiro e fará o programa voar quando o programa tentar colocar a string no inteiro.
Se realmente for necessária fazer essa validação, leia a idade como vetor de char e verique se cada posicao no vetor está entre 0 e 9, assim:
[code]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int numero_valido(char num_str[]);
int main ()
{
// números de no máximo 10 dígitos
char num_str[10];
// onde guardaremos o número caso ele seja válido
int numero;
printf("Digite o número: ");
gets(num_str);
if (!numero_valido(num_str))
{
puts("Número não é válido");
puts(num_str);
}
else
{
numero = atoi(num_str);
printf("O número %d é válido \n", numero);
}
}
int numero_valido(char num_str[])
{
for(int i = 0; i < strlen(num_str); i++)
{
if (!(num_str[i] >= ‘0’ && num_str[i] <= ‘9’))
{
return 0;
}
}
return 1;
}[/code]
.
vlw renamd, acho que seu código dará certo. vou testar e amanhã volto aqui pra dizer se deu certo! flww
[quote=diegointersoft]Eu conheço a função isdigit e outras derivadas do ctype.h, mas elas não funcionam em meu programa ! Alguém ai descobriu uma lógica eficaz que impede isso ?
De um exemplo em código por favor.[/quote]
Boa noite diegointersoft,
Eu não sei se entendi muito bem a sua necessidade, mas isso aqui não lhe ajuda?
http://www.cplusplus.com/reference/clibrary/cctype/isalpha/
Espero que sim.
[]'s
O algoritmo do RENAMED resolveu meu problema, só fiz uns ajustes nele:
int FNumComp(char string[])
{
for (int i = 0; i < strlen(string); i++){
if ( (string[i] >= '0' && string[i] <= '9') == 0)
return 0; // Numero nao é valido
}
return 1; // Numero é valido
}
float FNumArm () {
float num=0;
char string[10];
do{
gets(string);
if (FNumComp(string) == 0)
printf("Numero nao e valido\n%s\n\n", string);
else
num = atoi(string);
}while(num == 0);
return num;
}
Obrigado a todos !
[quote=diegointersoft]O algoritmo do RENAMED resolveu meu problema, só fiz uns ajustes nele:
int FNumComp(char string[])
{
for (int i = 0; i < strlen(string); i++){
if ( (string[i] >= '0' && string[i] <= '9') == 0)
return 0; // Numero nao é valido
}
return 1; // Numero é valido
}
float FNumArm () {
float num=0;
char string[10];
do{
gets(string);
if (FNumComp(string) == 0)
printf("Numero nao e valido\n%s\n\n", string);
else
num = atoi(string);
}while(num == 0);
return num;
}
Obrigado a todos ! [/quote]
Maravilha velhinho, ^^
Soh edita o assunto do seu primeiro post e acrescenta a tag [RESOLVIDO] nele.
[]'s