SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: mistermeyo en Lunes 3 de Octubre de 2005, 12:59

Título: Duda Con Atoi
Publicado por: mistermeyo en Lunes 3 de Octubre de 2005, 12:59
:hola: Hola a todos, lo que quiero  hacer es lo siguiente:
Necesito ingresar por teclado 10  numeros (cadena) y los quiero convertir a enteros, para eso si no me equivoco uso atoi.

La idea es esta ingreso= 1243567852 y que me devuelva enteros= 1243567852

el problema es me devuelve 22252, pero por ejemplo si ingreso 4 numeros si me los devuelve como quiero, (cadena=1234 ==> enteros=1234)  ¿como lo puedo solucionar, que esta mal?

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6. int main(int argc, char* argv[])
  7. {
  8.       char str1[10];
  9.       int n;
  10.       printf("Introduce  cadena de caracteres: ");
  11.       gets(str1);
  12.       n=atoi(str1);
  13.       printf("cadena = %s entero= %d\n", str1, n);
  14.       getch();
  15.       return 0;
  16. }
  17.  
  18.  

Saludos y gracias!!
Título: Re: Duda Con Atoi
Publicado por: rir3760 en Lunes 3 de Octubre de 2005, 14:18
Eso se debe a que el valor que se introduce sobrepasa la capacidad del tipo int, una posible solucion seria que utilizaras la funcion atol (array to long).

Los valores maximos permitidos para los diferentes tipos enteros estan definidos en el archivo limits.h.

En todo caso es mejor utilizar la funcion strtol (stdlib.h) ya que esta te permite realizar una validacion mas estricta como verificar si el valor esta en el rango valido para el tipo long, si todos los caracteres de la cadena se convirtieron con exito, etc.

Y tambien te recomendaria que eliminaras la llamada a la funcion gets y la sustituyas con fgets + strchr.

Un saludo
Título: Re: Duda Con Atoi
Publicado por: mistermeyo en Martes 4 de Octubre de 2005, 12:12
:(  nup.... al pobrar con atol, sucede lo mismo, revise el archivo limits.h que tu me dices y la verdad es que no entendi mucho como aplicarlo... recuerda que soy muy nuevo en esto, me podrias explicar mas detenidamente o con algun ejemplo si no es mucho pedir... gracias
Título: Re: Duda Con Atoi
Publicado por: rir3760 en Martes 4 de Octubre de 2005, 17:06
El archivo limits.h define los valores maximos y minimos que se pueden almacenar en los tipos enteros como int, long, etc.

Por ejemplo, para conocer los limites de los tipos int y long podemos utilizar:
Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4.  
  5. int main(void)
  6. {
  7.    printf("int  - valor maximo = % d\n", INT_MAX);
  8.    printf("int  - valor minimo = % d\n", INT_MIN);
  9.    
  10.    printf("long - valor maximo = % ld\n", LONG_MAX);
  11.    printf("long - valor minimo = % ld\n", LONG_MIN);
  12.    
  13.    return EXIT_SUCCESS;
  14. }
  15.  

Si queremos verificar que estos limites no se sobrepasen no nos sirven las funciones atoi y atol. En su lugar tenemos que utilizar la funcion strtol, un ejemplo sobre como utilizar esta funcion se encuentra en este tema: Leer Solo Números O Solo Letras (http://foros.solocodigo.com/index.php?showtopic=14466)

Un saludo
Título: Re: Duda Con Atoi
Publicado por: mistermeyo en Miércoles 5 de Octubre de 2005, 05:09
;)  Gracias maestro por la ayuda, al ver el ejemplo del enlace, me da una idea de como puedo hacerlo,... gracias por tu tiempo!  cya!