ctype库中的atoi函数在C中不起作用
atoi function in ctype library not working in C
我几乎在 Whosebug 中阅读了所有关于我的问题的文章,但他们没有解决它。我想要一个将字符串中所有数字相加并显示结果的程序。例如,当我写“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 *)
期望 const char *
而 input[i]
是 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()
Why is the gets function so dangerous that it should not be used?.
我几乎在 Whosebug 中阅读了所有关于我的问题的文章,但他们没有解决它。我想要一个将字符串中所有数字相加并显示结果的程序。例如,当我写“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 *)
期望 const char *
而 input[i]
是 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()
Why is the gets function so dangerous that it should not be used?.