为什么我的功能atoi不起作用?

时间:2016-12-02 22:49:13

标签: c atoi

我正在尝试创建我的个人atoi功能,但我没有正常工作。我不知道为什么。

272794 and a new line. 

我有点工作,但事实并非如此。它给了我一个奇怪的结果,甚至忽略了' \ n'。 它给我的结果就是这个。

27

只有我的功能,它只给我int ft_atoi(const char *str) { int i; int n; i = 0; while (str[i] == '\t' || str[i] == ' ' || str[i] == '+' || str[i] == '-') ++i; n = i; while (str[n] >= '0' && str[n] <= '9') { ++n; } return(str[n]); }

编辑:

我创建了一个新程序。但它仍然无法奏效。它根本无法看到数字。

std::sin(radian)

1 个答案:

答案 0 :(得分:2)

您的数字测试的边界设置错误。您正在测试str[i] > 48 && str[i] < 57,但48是0字符的序数,57是9的序数。这意味着您只考虑1到8(包括1和8)为数字,并且您停止在2794fsffsf而不是第一个9解析f

将测试更改为str[i] >= 48 && str[i] <= 57将解决边界问题,但仍然会比自我记录更少。为了明确你对那些没有记忆的ASCII表的人做了什么,你可以这样做:

 while ('0' <= str[i] && str[i] <= '9')

或可能稍微慢一点,但更明显的是ctype.h

 while (isdigit(str[i]))

您可以使用isspace(str[i])替换许多非显而易见的空白序数值测试。