#include<stdio.h>
int ft_atoi(char *str)
{
int i;
int sign;
int val;
int nbr;
i = 0;
sign = 1;
val = 0;
nbr = 0;
while(str[i] != '\0')
{
if (str[i] == '-')
sign = -sign;
i++;
}
i = 0;
while(str[i] >= '0' && str[i] <= '9' && str[i] != '\0')
{
nbr = (int) (str[i] - '0');
val = (val * 10) + nbr;
i++;
}
i++;
return (val * sign);
}
Он возвращает 0, когда я пытаюсь использовать отрицательные числа.Почему моя реализация atoi не работает с отрицательными числами?
Дело в том, что у вас есть -ve номер, который не проходит внутри цикла. вы должны проверить, является ли первый символ '-', вы должны сделать' i ++ ', чтобы он мог получить следующий символ. – Himanshu
Помимо того, что вы являетесь источником вашей проблемы, цикл дважды является огромной тратой. О, и вы действительно должны передать 'const char *', так как не ожидается, что такая функция изменит содержимое строки. Посмотрите, как [упрощает все с помощью всего одного цикла] (http://coliru.stacked-crooked.com/a/a08491d633f7fb7e) –
Забыл включить чек на цифру, конечно, должен [выглядеть так] (http: /coliru.stacked-crooked.com/a/5327f86dd3fd7388) –