【问题标题】:atoi function in ctype library not working in Cctype库中的atoi函数在C中不起作用
【发布时间】:2021-11-08 22:27:57
【问题描述】:

我几乎在 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 函数有问题。你们能帮我解决这个问题吗?

【问题讨论】:

  • atoi 的参数必须是字符串,而不是 char
  • 当你试图编译atoi(input[i])时应该得到警告
  • 永远不要将问题描述为“不工作”。总是陈述你观察到的和你想要的,以及重现问题所需的任何输入和条件。例如,说“当我尝试编译它时,我的编译器会打印错误消息 错误消息的文本”或“该程序编译时出现我忽略的警告,但是当它运行时,它会打印 输出的准确文本,但我希望它打印所需的准确文本。”
  • 您不需要使用atoi() 将单个数字转换为数字。只需使用input[i] - '0'
  • @EricPostpischil 我下次会注意的,谢谢。

标签: c atoi


【解决方案1】:

atoi(input[i]) 是一个问题,因为 int atoi(const char *) 需要 const char *input[i]char

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

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

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

溢出

for(i=0; i&lt;=15; i++) 可能会遍历字符串的末尾。而是寻找 空字符

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

邪恶gets()

Why is the gets function so dangerous that it should not be used?.

【讨论】:

  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
相关资源
最近更新 更多