Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Locura_23 en 9 Mayo 2021, 22:24 pm



Título: Duda con la función atoi()
Publicado por: Locura_23 en 9 Mayo 2021, 22:24 pm
Buenas a todos!
Tengo una duda con este procedimiento, Le pedimos, por ejemplo, un entero al usuario... tomamos lo que cargue como una cadena , en caso de que haya ingresado algo mal. Y con la función atoi() lo convertimos a un entero.  El problema es que si ingreso por ejemplo, algo como "abcds29" no me capta el 29.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    int num;
  8.    char cad[50];
  9.  
  10.    printf("Introduzca un numero entero\n");
  11.  
  12.    gets(cad);
  13.  
  14.    num = atoi(cad); /**convierte una cadena en  un entero solo si no
  15.     hay letras antes del entero?**/
  16.    printf("El numero registrado es %i\n",num);
  17.  
  18.    return 0;
  19. }
  20.  


Título: Re: Duda con la función atoi()
Publicado por: Eternal Idol en 9 Mayo 2021, 22:35 pm
https://www.cplusplus.com/reference/cstdlib/atoi/

"If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed and zero is returned."


Título: Re: Duda con la función atoi()
Publicado por: temporalEotw en 9 Mayo 2021, 22:54 pm
Es cierto, funciona si la en la cadena hay solo números. Si realmente quieres obtener los números aunque hayan caracteres deberías hacer una función que limpie esa cadena de todo lo que no sea un número, desconozco si hay una función que haga esto.


Título: Re: Duda con la función atoi()
Publicado por: Locura_23 en 9 Mayo 2021, 23:05 pm
Ya veo gracias por sus respuestas! quería confirmarlo.