#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#include <stdlib.h>
#define LONG_CADENA 256
int main(int argc, char *argv[])
{
char cadena[LONG_CADENA];
char *pac;
long numero;
/* leer cadena de la entrada estandard */
printf("Introduce un numero entero: ");
fflush(stdout);
fgets(cadena, LONG_CADENA, stdin);
/* eliminar '\n' si existe */
if ((pac = strchr(cadena, '\n')) != NULL)
*pac = '\0';
if (cadena[0] == '\0'){
puts("Error: la longitud de la cadena es 0");
return EXIT_FAILURE;
}
numero = strtol(cadena, &pac, 10);
if (numero == 0 && pac == cadena){
puts("Error: la cadena no puede convertirse al tipo signed long");
return EXIT_FAILURE;
}
if (errno == ERANGE && (numero == LONG_MAX || numero == LONG_MIN)){
puts("Error: numero fuera del rango valido para el tipo signed long");
return EXIT_FAILURE;
}
if (*pac != '\0'){
printf("Error: caracteres no validos al final de la cadena: ");
printf("\"%s\"\n", pac);
return EXIT_FAILURE;
}
printf("El numero %ld es valido\n", numero);
return EXIT_SUCCESS;
}