Como receber somente número em um scanf, na linguagem C?

Oi,

Tenho o seguinte programa:


#include <stdio.h>
#include <stdlib.h>
int main()
{
       int idade;
       idade = 0;
       printf("\nIdade: ");
       scanf("%d", &idade);
       system("pause");
       return(0);
}

Como posso fazer para não deixar o usuário digitar letras, aceitar somente números. Tenho como fazer?
Uso linguagem C.

vc colocando %d ele só vai ler numero creio eu se vc digitar uma letra gerará um erro.

Não gera.

Já rodei o programa ele recebe letras e números.

Atenção, não sei se no C que você está usando existe o método strtoul.

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

int isNumeric (const char* str) 
{
    char *stop = 0;
    strtoul (str, &stop, 10); 
    return (stop - str == strlen (str));
}

int main (int argc, char *argv[]) 
{
    char strIdade [20];
    int ok = 0;
    int idade;
    do {
        printf ("Entre com a idade: ");
        gets (strIdade);
        if (!isNumeric (strIdade)) 
        {
            fprintf (stderr, "Por favor, entre com um valor numérico.\n");
        } 
        else 
        {
            idade = atoi (strIdade);
            ok = 1;
        }
    } while (!ok);
    printf ("O valor entrado foi: %d\n", idade);
    system ("pause");
    return 0;
}

compara a entrada com numeros de 0 a 9 e se não for igual nenhum é porque é um caracter

esse é um modo bem simples

scanf ("%d") tem o seguinte comportamento: ele vai tentar procurar, nas coisas que você digitou, algo que se pareça com um número. Eu realmente não gosto muito de scanf porque ele é meio “mané” mesmo.

Outra forma de fazer que me veio à cabeça:

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


int main (int argc, char *argv[]) 
{
    char strIdade [20];
    int ok = 0;
    int idade;
    while (1) {
        printf ("Entre com a idade: ");
        gets (strIdade);
        if (sscanf (strIdade, "%d", &idade) != 1) 
        {
            fprintf (stderr, "Por favor, entre com um valor numérico.\n");
        } 
        else 
        {
            break;
        }
    };
    printf ("O valor entrado foi: %d\n", idade);
    system ("pause");
    return 0;
}

Entretanto, dessa maneira, se você entrar com a string “7cabecas”, por exemplo, ele aceita o valor 7.

É não tem como você manda fazer isso, por que um caracter lido como inteiro vira um numero, o que você pode fazer é testar um scanf num while e se não for número ele apenas apaga o que foi escrito e fica esperando outro input.

abraço.