Cita:
Iniciado por eferion 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#include <stdio.h>
#include <ctype.h>
int main ( ) {
int i = 0 , numero ;
char num [20] ;
do {
printf ( "\nIntroduzca un numero entero: " ) ; for ( i = 0 ; num [ i ] ; i++ ) {
if ( num [0] == '-' || num [0] == '+' ) ++i;
if ( ! isdigit ( num
[i
] ) ) { i
= -1 ; break ; } }
}while( i == -1 ) ;
return 0 ;
}
¡¡¡AGGG¡¡¡, perdón que es con función
:
Código C++:
Ver original#include <stdio.h>
#include <ctype.h>
int EsNumero( char* cadena ) {
int i ;
for ( i = 0 ; cadena [ i ] ; i++ ) {
if ( cadena [0] == '-' || cadena [0] == '+' ) ++i;
if ( ! isdigit ( cadena
[i
] ) ) return 0 ; }
return 1 ;
}
int main ( ) {
int numero ;
char num [20] ;
do {
printf ( "\nIntroduzca un numero entero: " ) ; }while( !EsNumero( num ) ) ;
return 0 ;
}
¡¡¡Güeeeno, está bien, con punteros:
Código C++:
Ver originalint EsNumero( char *cadena ) {
int i ;
if ( *cadena == '-' || *cadena == '+' ) ++cadena;
while ( *cadena ) {
if ( ! isdigit ( *cadena
) ) return 0 ; ++cadena;
}
return 1 ;
}
¡¡¡Saluditos!!!