[RESOLVIDO]Linguagem C: impedir o usuário de guardar um caracter em uma variável int !?

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(&quot;Digite o número: &quot;);
gets(num_str);

if (!numero_valido(num_str))
{
    puts(&quot;Número não é válido&quot;);
    puts(num_str);
}
else
{
    numero = atoi(num_str);
    printf(&quot;O número %d é válido \n&quot;, 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 &lt; strlen(string); i++){  
        if ( (string[i] &gt;= '0' && string[i] &lt;= '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(&quot;Numero nao e valido\n%s\n\n&quot;, string);    
       else
           num = atoi(string); 
    }while(num == 0);  
  return num;
}  

Obrigado a todos ! :wink:

[quote=diegointersoft]O algoritmo do RENAMED resolveu meu problema, só fiz uns ajustes nele:

int FNumComp(char string[])  
{  
    for (int i = 0; i &lt; strlen(string); i++){  
        if ( (string[i] &gt;= '0' && string[i] &lt;= '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(&quot;Numero nao e valido\n%s\n\n&quot;, string);    
       else
           num = atoi(string); 
    }while(num == 0);  
  return num;
}  

Obrigado a todos ! :wink: [/quote]

Maravilha velhinho, ^^

Soh edita o assunto do seu primeiro post e acrescenta a tag [RESOLVIDO] nele.

[]'s