Ver Mensaje Individual
  #14 (permalink)  
Antiguo 20/11/2014, 06:02
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 7 meses
Puntos: 49
Respuesta: do while false

Cita:
Iniciado por eferion Ver Mensaje
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.............

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.
Coincido plenamente con eferion en todas sus consideraciones.

Y para que no se diga, otra propuesta sin tanto" flag" como en el anterior y sin sacar la artillería de punteros:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int main ( ) {
  5.   int i = 0 , numero  ;
  6.   char num [20] ;
  7.   do {
  8.     printf ( "\nIntroduzca un numero entero: " ) ;
  9.     scanf ( "%s" , num ) ;
  10.     for ( i = 0 ; num [ i ] ; i++ ) {
  11.       if ( num [0] == '-' || num [0] == '+' )   ++i;
  12.       if ( ! isdigit ( num [i] ) ) { i = -1 ; break ; }
  13.     }
  14.   }while( i == -1 ) ;
  15.   printf ( "\nnumero = %d\n" , atoi ( num ) ) ;
  16.   return 0 ;
  17. }

¡¡¡AGGG¡¡¡, perdón que es con función :

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int EsNumero( char* cadena ) {
  5.     int i ;
  6.     for ( i = 0 ; cadena [ i ] ; i++ ) {
  7.       if ( cadena [0] == '-' || cadena [0] == '+' )  ++i;
  8.       if ( ! isdigit ( cadena [i] ) )  return 0 ;
  9.     }
  10.     return 1 ;
  11. }
  12.  
  13. int main ( ) {
  14.   int numero  ;
  15.   char num [20] ;
  16.   do {
  17.     printf ( "\nIntroduzca un numero entero: " ) ;
  18.     scanf ( "%s" , num ) ;
  19.   }while( !EsNumero( num ) ) ;
  20.   printf ( "\nnumero = %d\n" , atoi ( num ) ) ;
  21.   return 0 ;
  22. }

¡¡¡Güeeeno, está bien, con punteros:

Código C++:
Ver original
  1. int EsNumero( char *cadena ) {
  2.   int i ;
  3.   if ( *cadena  == '-' || *cadena  == '+' )  ++cadena;
  4.   while ( *cadena ) {
  5.      if ( ! isdigit ( *cadena ) )  return 0 ;
  6.      ++cadena;
  7.   }
  8.   return 1 ;
  9. }

¡¡¡Saluditos!!!


Última edición por leosansan; 20/11/2014 a las 06:22