C 无法对字符数组中的整数执行算术运算

C 无法对字符数组中的整数执行算术运算,c,char,C,Char,这是我做的一个测试程序 #include <stdio.h> int main(){ char arr[10]; int res=0, p = 2; scanf(" %c",&arr[1]); if(arr[1]>=48 &&arr[1]<=57){ res = arr[1] * p; } res = res+10; printf("

这是我做的一个测试程序

#include <stdio.h>

int main(){
    char arr[10];
    int res=0, p = 2;
    scanf(" %c",&arr[1]);
    
    if(arr[1]>=48 &&arr[1]<=57){
        res = arr[1] * p;
    }

    res = res+10;
    printf("%d",res);
}
#包括
int main(){
char-arr[10];
int res=0,p=2;
scanf(“%c”和&arr[1]);

如果(arr[1]>=48&&arr[1]如果您将字符
'2'
读入数组,您可以使用
%c
(或
%c”
),则到达该数组的值将是ASCII码“2”,而不是值2

“2”的ASCII值比2高得多


正如Eugene在一篇评论中提到的,适应偏移量的方法是减去ASCII和“数字值”的差值,最有效和自我解释的方法是减去字符(而不是值)
'0'
arr[1]
中减去
48
。或者最好减去
'0'
(注意引号)@EugeneSh.我将您的评论加入到我的答案中。如果您不介意,请告诉我。例如,如果您正在回答。@user3121023很好。它允许输入“255”正确结束。我建议把它变成一个答案。但也许会问OP是否真的希望将多位数视为数字。我似乎不太清楚。@Yunnosch目前没有问题all@user3121023真的,你显然可以做出一个有趣的答案。继续。奇怪的是,这是我今天编辑的第二个答案,其中包含了一个cont发布-历史上没有可见的编辑…这叫做“宽限期”,不是吗?我想如果你编辑得足够快,它就不会显示出来。我希望我的独立答案和最后一段中有你贡献的版本之间有“记录”的区别。啊,好吧,只要你不介意。。。。