首页 > 解决方案 > ctype库中的atoi函数在C中不起作用

问题描述

我几乎在stackoverflow中阅读了所有关于我的问题的文章,但他们没有解决它。我想要一个将字符串中的所有数字相加并显示结果的程序。例如,当我写“a2s23l”时,它会在屏幕上显示 2 + 2 + 3 = 7。我写了这个:

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

int main() {
    char input[15];
    printf("Write smth: ");
    gets(input);

    int i, result = 0;
    for(i=0; i<=15; i++)
    {
        if(isdigit(input[i]) != 0)
        {
            result = result + atoi(input[i]);
        }
    }

    printf("Your result: %d", result);

    return 0;
}

这是行不通的。我认为 atoi 函数有问题。你们能帮我解决这个问题吗?

标签: catoi

解决方案


atoi(input[i])是一个int atoi(const char *)预期的问题 aconst char *并且input[i]是 a char

这意味着 OP 没有启用所有编译器警告。
节省时间,启用所有编译器警告。

由于input[i]是数字字符,要转换为数字值:

int single_digit_value = input[i] - '0';
result = result + single_digit_value;

超限

for(i=0; i<=15; i++)可能会迭代到字符串的末尾。而是寻找空字符

// for(i=0; i<=15; i++)
for(i=0; input[i]; i++)

邪恶的gets()

为什么gets函数如此危险以至于不应该使用它?.


推荐阅读