Yo para asegurarme que solo introduzca numeros y no caracteres hago esto:
#include <stdio.h>
int main(void)
{
signed int numero;
do
{
printf("Numero : ");
setbuf(stdin, NULL);
} while(scanf("%d", &numero) != 1);
printf("{%d}\n", numero);
return 0;
}
Pero por supuesto, sólo funciona para asegurar que no se ingresen caracteres, no funcionaria para string ni para otros.
Yo habia pensado en algo asi:
#include <stdio.h>
main()
{
int caracter;
printf("Introduce tu caracter:\n");
scanf("%i",&caracter);
if ( sizeof(caracter)==4 )
{
printf("Gracias por introducir un numero\n");
}
else
{
printf("Esto no es un numero\n");
}
}
Es mejor usar %d, ya que con %i eres propenso a que se ingresen enteros en otras bases, así que mejor usa %d para base decimal.