La solucion exacta depende, principalmente, de los requisitos de validacion del algoritmo.
Por ejemplo si se espera, de facto, que la entrada sea valida consistiendo de un numero sin signo y posiblemente con decimales basta con:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int ch;
int num_digitos;
num_digitos = 0;
while ((ch
= getchar()) >= '0' && ch
<= '9' || ch
== '.') num_digitos++;
printf("Numero de digitos: %d\n", num_digitos
);
return EXIT_SUCCESS;
}
Pero si se requiere de una validacion mas solida lo mejor es crear una pequeña maquina de estado.
Un saludo