C 从数组中获取数字并分配给一个int

C 从数组中获取数字并分配给一个int,c,logic,C,Logic,我正在做作业,试图从数组中获取两个数字字符,例如ABC10DEF 我想获取10并将其存储在int类型中 number_holder_1 = back[3] - '0'; number_holder_2 = back[4] - '0'; number = number_holder_1 * 10 + number_holder_2; 这不管用,我不知道为什么 当我打印出number\u holder\u 1的值时,它确实显

我正在做作业,试图从数组中获取两个数字字符,例如
ABC10DEF

我想获取
10
并将其存储在
int
类型中

            number_holder_1 = back[3] - '0';
            number_holder_2 = back[4] - '0';

            number = number_holder_1 * 10 + number_holder_2;
这不管用,我不知道为什么

当我打印出
number\u holder\u 1
的值时,它确实显示
1
,当我显示
number\u holder\u 2
时,它显示
0
,但当我打印
number
时,它只显示
0

我不知道怎么做

更新:

number
number\u holder\u 1
number\u holder\u 2
定义为
int
类型

            number_holder_1 = back[3] - '0';
            number_holder_2 = back[4] - '0';

            number = number_holder_1 * 10 + number_holder_2;

名为
back
的数组从main传递而来,该数组包含
ABC10DEF

这似乎是一个实现错误,因为使用您给定的变量名,它确实可以工作

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

int letter2int(char c) {
    int n;
    if (isdigit(c)) {
        n = c - '0';
    } else {
        n = -1; /* error */
    }

    /* for debugging */
    printf("For character '%c' we get number '%d'.\n", c, n);

    return n;
}

int main(int argc, char** argv) {
    const char str[] = "ABC10DEF";
    int tens, ones;
    int result;

    tens = letter2int(str[3]);
    ones = letter2int(str[4]);

    result = tens * 10 + ones;

    printf("Result: %d\n", result);

    return 0;
}
#包括
#包括
int-letter2int(字符c){
int n;
if(isdigit(c)){
n=c-‘0’;
}否则{
n=-1;/*错误*/
}
/*用于调试*/
printf(“对于字符'%c',我们得到数字'%d'。\n',c,n);
返回n;
}
int main(int argc,字符**argv){
常量字符str[]=“ABC10DEF”;
整数十,一;
int结果;
tens=letter2int(str[3]);
1=字母2int(str[4]);
结果=十乘十+一;
printf(“结果:%d\n”,结果);
返回0;
}
这可以概括为形成一个atoi函数(ASCII到整数),或者通过使用循环和指向字符串上索引的
str
指针来提取字符串中出现的第一个数字(以任何非数字字符终止)


使用
i
作为零基索引,
result+=number*(int)pow(10,i)

这似乎是一个实现错误,因为使用您所给出的,再加上一些更好的变量名,它确实有效

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

int letter2int(char c) {
    int n;
    if (isdigit(c)) {
        n = c - '0';
    } else {
        n = -1; /* error */
    }

    /* for debugging */
    printf("For character '%c' we get number '%d'.\n", c, n);

    return n;
}

int main(int argc, char** argv) {
    const char str[] = "ABC10DEF";
    int tens, ones;
    int result;

    tens = letter2int(str[3]);
    ones = letter2int(str[4]);

    result = tens * 10 + ones;

    printf("Result: %d\n", result);

    return 0;
}
#包括
#包括
int-letter2int(字符c){
int n;
if(isdigit(c)){
n=c-‘0’;
}否则{
n=-1;/*错误*/
}
/*用于调试*/
printf(“对于字符'%c',我们得到数字'%d'。\n',c,n);
返回n;
}
int main(int argc,字符**argv){
常量字符str[]=“ABC10DEF”;
整数十,一;
int结果;
tens=letter2int(str[3]);
1=字母2int(str[4]);
结果=十乘十+一;
printf(“结果:%d\n”,结果);
返回0;
}
这可以概括为形成一个atoi函数(ASCII到整数),或者通过使用循环和指向字符串上索引的
str
指针来提取字符串中出现的第一个数字(以任何非数字字符终止)


使用
i
作为零基索引,
result+=number*(int)pow(10,i)

number
声明为
int
?@Radu它只是不用于显示,我正试图将它存储到
int
,并在
中用于循环
number\u holder\u 1
number\u holder\u 2
也是
int
吗?如果是这样,我不明白为什么它会给
number
带来错误的结果。您用于输出
number
的打印语句的哪一行?请注意,如果您提供一个人们可以编译以重现您的问题的自包含示例,那么最容易提供帮助……这样我们就不必问所有这些猜测问题了!阅读此文:
number
声明为
int
?@Radu它只是不用于显示,我正试图将它存储到
int
,并在
for loop
number\u holder\u 1
number\u holder\u 2
中使用它?如果是这样,我不明白为什么它会给
number
带来错误的结果。您用于输出
number
的打印语句的哪一行?请注意,如果您提供一个人们可以编译以重现您的问题的自包含示例,那么最容易提供帮助……这样我们就不必问所有这些猜测问题了!阅读以下内容:@myctylr,我不允许像创建一个新函数一样创建,但我要看看我可以从您提供的内容中更改什么。@Ali,我建议您通过比较这两者来查找自己代码中的错误。我保证我不会使用您的代码。我要先看看哪里是真正的错误。@myctylr,我不允许像创建一个新函数一样创建,但我要看看我可以从您提供的代码中更改什么。@Ali,我建议您通过比较这两个代码来查找您自己代码中的错误。我保证我不会使用您的代码。我要先看看哪里是真正的错误。