elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Aporte] No superar el máximo permitido por el tipo int. lenguaje C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte] No superar el máximo permitido por el tipo int. lenguaje C  (Leído 1,930 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
[Aporte] No superar el máximo permitido por el tipo int. lenguaje C
« en: 23 Agosto 2016, 20:10 pm »

Hola, dejo mi humilde aporte al foro con un tema que tiene que ver con esto. -http://foro.elhacker.net/programacion_cc/dudas_con_cola_e_intmax_lenguaje_c-t456602.0.html
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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <limits.h>
  5. #include <ctype.h>
  6.  
  7. void valIngInt( void );
  8. void limpiar( void );
  9. int valFinal( char charIngreso[], char charIntMax[] );
  10. void mensaje( int men );
  11.  
  12. int main( void ){
  13.  
  14. valIngInt();
  15.  
  16. return 0;
  17. }
  18.  
  19. void valIngInt( void ){
  20. int i, ok, cantDigInt, men, numero;
  21. char charIntMax[20], charIngreso[11],aux;
  22.  
  23. cantDigInt = sprintf(charIntMax, "%d", INT_MAX);
  24.  
  25. do{
  26. limpiar( );
  27.  
  28. ok=1, i=0;
  29. printf( "\n Ingrese un numero entero ( mayor a 0 e igual o menor a %d )\n .....:" , INT_MAX);
  30. while ((aux = getchar()) != EOF && aux != '\n'){
  31. if( isdigit(aux) ){
  32. if( i == 0 && aux == '0'){
  33. ok=0;
  34. men = 1;
  35. mensaje( men );
  36. break;
  37. }
  38. charIngreso[i] = aux;
  39. }
  40. else{
  41. ok=0;
  42. men = 2;
  43. mensaje( men );
  44. break;
  45. }
  46. i++;
  47. if( i > cantDigInt ){
  48. ok=0;
  49. men = 3;
  50. mensaje( men );
  51. break;
  52. }
  53. }
  54. charIngreso[i] = '\0';
  55.  
  56. if( i ==  cantDigInt){
  57. ok = valFinal( charIngreso, charIntMax );
  58. if( ok == 0 ){
  59. men = 4;
  60. mensaje( men );
  61. }
  62. }
  63. }while( !ok );
  64. numero = atoi(charIngreso);
  65. printf( "\n Ingreso.....: %d", numero );
  66. }
  67.  
  68. void limpiar( void ){
  69. system("cls||clear");
  70. }
  71.  
  72. int valFinal( char charIngreso[], char charIntMax[] ){
  73. size_t i = 0, ok=1;
  74.  
  75. while( charIngreso[i] != '\0' ){
  76. if(charIngreso[i] > charIntMax[i]){
  77. ok = 0;
  78. break;
  79. }else if( charIngreso[i] < charIntMax[i] ){
  80. break;
  81. }
  82. i++;
  83. }
  84.  
  85. return ok;
  86. }
  87.  
  88. void mensaje( int men ){
  89. int ch;
  90.  
  91. if( men == 1 || men == 2 || men == 3 ){
  92. while ((ch = getchar()) != EOF && ch != '\n');
  93. }
  94.  
  95. if( men == 1 ){
  96. printf( "\n El ingreso es incorrecto, el primer digito no puede ser cero\n\n\t");
  97. }else if( men == 2 ){
  98. printf( "\n El ingreso es incorrecto, debe ingresar solo digitos del 0 al 9 \n\n\t" );
  99. }
  100. else if( men == 3 ){
  101. printf( "\n El ingreso es incorrecto, supera el maximo permitido ==> %d \n\n\t" , INT_MAX );
  102. }
  103. else{
  104. printf( "\n El ingreso es incorrecto, supera el maximo permitido ==> %d \n\n\t" , INT_MAX );
  105. }
  106.  
  107. printf( "Pulse una tecla para intentarlo nuevamente..." ); getchar();
  108. }

Un gran saludo para todos.


« Última modificación: 23 Agosto 2016, 22:46 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: [Aporte] No superar el máximo permitido por el tipo int. lenguaje C
« Respuesta #1 en: 24 Agosto 2016, 02:21 am »

Hola.
Les dejo otro código que parece funcionar a la perfección, no me pregunten quien lo escribió porque apareció en mi disco rígido y no recuerdo de donde lo saque. -
Trate de encontrarle la lógica pero todavía no lo logro, lo único que me digo si este programa funciona sin fallas,  lo mio da vergüenza. -

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <limits.h>
  4.  
  5. int main(void){
  6. int numero = 0, c;
  7.  
  8. printf("\n\n Ingrese una numero entero (maximo permitido %u)....:", INT_MAX);
  9.  
  10. while((c = getchar()) != '\n' && c != '\r'){
  11. if(isdigit(c)){
  12. if( INT_MAX-numero*10 >= c-'0' ){
  13. numero = (numero*10) + (c-'0');
  14. }
  15. else{
  16. printf( "\n El numero ingresado supera el maximo permitido..." );
  17. numero = 0;
  18. break;
  19. }
  20. }
  21. else{
  22. printf( "\n Ingreso invalido..." );
  23. numero = 0;
  24. break;
  25. }
  26. }
  27.  
  28. printf("\n Ingreso.............:%d", numero);
  29. return 0;
  30. }

Saludos.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
aporte - Editor de codigo fuente de varios lenguaje « 1 2 »
Programación Visual Basic
d(-_-)b 13 5,901 Último mensaje 18 Julio 2007, 02:09 am
por Freeze.
Pasar de cadena(char) a entero(int) sin sobrepasar el máximo permitido. « 1 2 3 »
Programación C/C++
NOB2014 21 9,974 Último mensaje 9 Enero 2014, 14:35 pm
por leosansan
numero maximo permitido
Programación C/C++
m@o_614 5 3,313 Último mensaje 22 Febrero 2014, 23:32 pm
por vangodp
¿Legalmente esta permitido hacer este tipo de llamadas?[Duda] « 1 2 3 »
Foro Libre
Senior++ 20 11,586 Último mensaje 29 Abril 2014, 12:09 pm
por Senior++
[Aporte] Swift, el nuevo lenguaje de Apple (Conceptos básicos)
Programación General
IlconZy 3 2,588 Último mensaje 17 Febrero 2015, 14:26 pm
por Usuario Invitado
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines