c - 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 函数有问题。你们能帮我解决这个问题吗?
解决方案
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()
推荐阅读
- node.js - 将 PM2 与本地 Windows 服务用户一起使用时,如何配置 Puppeteer 以写入特定的临时文件夹?
- javascript - 如何在 Vue 中保存表单提交时更改的道具数据?
- python - 无法导入相对于正在运行脚本的目录的模块
- javascript - 反应地图对象包含数组
- r - 有没有办法根据值自动生成组内不同的行组合?
- encryption - Asp.Net Core Jwt access_token 签名和加密
- ssas - 如何解决行级安全性能影响
- airflow - 覆盖气流中的雪花钩
- virtual-environment - 没有 Python 的 Mac 上的虚拟环境
- powershell - powershell:根据名称将文件复制到子目录