Coincido con
leosansan. Lo mejor suele ser primero verificar y después convertir.
Cuando te enfrentas a un usuario lo lógico es pensar mal. Si hay alguna posibilidad de que un usuario introduzca un texto en un campo numérico, ten fe que así lo hará... eso y que el mejor mantenimiento se consigue cuando se separan tareas, lo más factible a la larga es chequear los valores en una primera capa y después hacer las conversiones en una segunda.
Claro que puedes fusionar ambas capas y hacerlo todo a la vez... sin embargo ese código luego te va a resultar más complicado de depurar y de actualizar.
Mi propuesta:
* Detecta el prefijo +/-
* Un número compuesto solo por el prefijo se considera no válido
* Se admiten números sin prefijo.
* Se detectan caracteres no numéricos en cualquier parte de la secuencia.
Código C++:
Ver originalint EsNumero( char* cadena )
{
int to_return = 0;
if ( *cadena == '-' || *cadena == '+' )
++cadena;
do
{
} while( to_return && *++cadena );
return to_return;
}
int main ( )
{
char num [20];
int numero;
do
{
printf( "Introduzca un numero entero: " ); } while( !EsNumero( num ) );
printf ( "numero = %d\n" , numero
) ; return EXIT_SUCCESS;
}
Un saludo.