• Viernes 17 de Mayo de 2024, 04:27

Autor Tema:  Duda Con Atoi  (Leído 1514 veces)

mistermeyo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Duda Con Atoi
« en: Lunes 3 de Octubre de 2005, 12:59 »
0
: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!!

rir3760

  • Miembro activo
  • **
  • Mensajes: 37
    • Ver Perfil
Re: Duda Con Atoi
« Respuesta #1 en: Lunes 3 de Octubre de 2005, 14:18 »
0
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
The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz

mistermeyo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Duda Con Atoi
« Respuesta #2 en: Martes 4 de Octubre de 2005, 12:12 »
0
:(  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

rir3760

  • Miembro activo
  • **
  • Mensajes: 37
    • Ver Perfil
Re: Duda Con Atoi
« Respuesta #3 en: Martes 4 de Octubre de 2005, 17:06 »
0
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

Un saludo
The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz

mistermeyo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Duda Con Atoi
« Respuesta #4 en: Miércoles 5 de Octubre de 2005, 05:09 »
0
;)  Gracias maestro por la ayuda, al ver el ejemplo del enlace, me da una idea de como puedo hacerlo,... gracias por tu tiempo!  cya!