Ahi te dejo un codigo, fijate si te sirve...
scanf devuelve el número de elementos de la entrada asignados, que pueden ser menores que los formatos suministrados para conversión, o incluso cero, en el caso de un fallo de concordancia. Cero indica que, mientras había caracteres disponibles en la entrada, no ocurrió ninguna asignación; normalmente esto es debido a un carácter de entrada inválido, como un carácter alfabético para una conversión ‘%d’.
#include <stdio.h>
int main (void)
{
int num;
if (scanf ("%d", &num) != 0)
puts ("Es un numero");
else
puts ("No es un numero");
return 0;
}
Otra forma de comprobar haciendo uso de la funcion isdigit() seria
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main (void)
{
char *num, *tmp;
int n;
num = malloc (5 * sizeof (char));
num = fgets (num, 5, stdin);
tmp = num;
while (*num != '\0')
{
if ((n = isdigit (*num)) == 0)
break;
num++;
}
free (tmp);
if (n != 0)
puts ("Es un numero");
else
puts ("No es un numero");
return 0;
}
tragantras en el ejemplo que pusiste te olvidaste de indicar las posiciones del arreglo
for(i = 0; cadena; i++)
printf("%c, %d\n", cadena, isdigit(cadena));
Codigo arreglado
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], isdigit(cadena[i]));
Salu10.