Lo que valido en el programa son 4 casos que detallo a continuación y que considero que no debería fallar. -
1 - Que el ingreso no sea cero ni que el primer dígito sea cero. -
2 - Que se ingresen solo dígitos. -
3 - Que no se supere el máximo permitido de dígitos, en mi pc el máximo permitido por el int es
2147483647 o sea 10 dígitos, si por ej. se ingresaran 11 o más se activaría el mensaje de error. -
4 - Por último si el ingreso es exactamente 10 dígitos, verifico dígito a dígito, si es menor por más
que el resto sean todos nueves el ingreso es correcto, si por el contrario es mayor por más que el
resto sean todos ceros el ingreso es incorrecto y si es igual continuo con el siguiente. -
Por último, espero 2 cosas, la primera que me den sugerencia para poder mejorarlo y la segunda es que me gustaría ver la versión de algunos de los expertos del foro, no para competir ya que no puedo todavía darme ese lujo, sino simplemente para que nos beneficiemos los que estamos estudiando el lenguaje. -
Código
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h> #include <ctype.h> void valIngInt( void ); void limpiar( void ); int valFinal( char charIngreso[], char charIntMax[] ); void mensaje( int men ); int main( void ){ valIngInt(); return 0; } void valIngInt( void ){ int i, ok, cantDigInt, men, numero; char charIntMax[20], charIngreso[11],aux; do{ limpiar( ); ok=1, i=0; if( i == 0 && aux == '0'){ ok=0; men = 1; mensaje( men ); break; } charIngreso[i] = aux; } else{ ok=0; men = 2; mensaje( men ); break; } i++; if( i > cantDigInt ){ ok=0; men = 3; mensaje( men ); break; } } charIngreso[i] = '\0'; if( i == cantDigInt){ ok = valFinal( charIngreso, charIntMax ); if( ok == 0 ){ men = 4; mensaje( men ); } } }while( !ok ); } void limpiar( void ){ } int valFinal( char charIngreso[], char charIntMax[] ){ size_t i = 0, ok=1; while( charIngreso[i] != '\0' ){ if(charIngreso[i] > charIntMax[i]){ ok = 0; break; }else if( charIngreso[i] < charIntMax[i] ){ break; } i++; } return ok; } void mensaje( int men ){ int ch; if( men == 1 || men == 2 || men == 3 ){ } if( men == 1 ){ }else if( men == 2 ){ } else if( men == 3 ){ } else{ } }
Un gran saludo para todos.