Ver Mensaje Individual
  #15 (permalink)  
Antiguo 20/11/2014, 06:23
kutcher
 
Fecha de Ingreso: noviembre-2014
Mensajes: 36
Antigüedad: 10 años, 2 meses
Puntos: 13
Respuesta: do while false

Cita:
Iniciado por eferion Ver Mensaje
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.
Pues si es en ese plan dejo mi propuesta haciendo uso de la función strtol para variar :

Código C++:
Ver original
  1. bool es_numero( char *s )
  2. {
  3.     while( *s )
  4.     {
  5.         strtol(s, &s, 10);
  6.         if (*s != 0) return false;
  7.     }
  8.     return true;
  9. }
  10.  
  11. int main(void)
  12. {
  13.     char num [20];
  14.     int numero = 0;
  15.  
  16.     do{
  17.         printf( "Introduzca un numero entero: " );
  18.         scanf("%s", num);
  19.     }while( !es_numero(num) );
  20.  
  21.     numero = atoi(num);
  22.     printf("Numero = %d\n", numero);
  23.  
  24.     return 0;
  25. }

leosansan tienes un problema es tus códigos en las lineas :

Código C++:
Ver original
  1. if ( cadena [0] == '-' || cadena [0] == '+' )  ++i;

Siempre verificas el primer indice si este contiene un '-' o '+' siempre incrementas i esto te causa problamas con las cifras pares, debe quedar asi :

Código C++:
Ver original
  1. if ( cadena [i] == '-' || cadena [i] == '+' )  ++i;

Saludos

Última edición por kutcher; 20/11/2014 a las 07:15