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,我建议您通过比较这两个代码来查找您自己代码中的错误。我保证我不会使用您的代码。我要先看看哪里是真正的错误。