Duda con la función atoi()

Iniciado por Locura_23, 9 Mayo 2021, 22:24 PM

0 Miembros y 1 Visitante están viendo este tema.

Locura_23

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.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int num;
    char cad[50];

    printf("Introduzca un numero entero\n");

    gets(cad);

    num = atoi(cad); /**convierte una cadena en  un entero solo si no
    hay letras antes del entero?**/
    printf("El numero registrado es %i\n",num);

    return 0;
}

Eternal Idol

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."
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

temporalEotw

#2
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.

Locura_23

Ya veo gracias por sus respuestas! quería confirmarlo.