比较int和char时,C中的简单“if”语句未按预期执行

比较int和char时,C中的简单“if”语句未按预期执行,c,if-statement,C,If Statement,我是C语言的新手,在一些必须非常基本的东西上遇到了麻烦 我有2个字符数组,正在计算一个“if”语句中数组元素之间的绝对差。然而,“if”语句并没有像我预期的那样进行评估。我打印的值的差值不大于1 这是否与abs函数返回一个int有关,然后将其与char进行比较 有什么建议吗 if(abs(arr1[i] - arr2[i]) > '1') printf("%c ", arr1[i]); printf("%c ", arr2[i]); printf("%d diff\n",

我是C语言的新手,在一些必须非常基本的东西上遇到了麻烦

我有2个字符数组,正在计算一个“if”语句中数组元素之间的绝对差。然而,“if”语句并没有像我预期的那样进行评估。我打印的值的差值不大于1

这是否与abs函数返回一个int有关,然后将其与char进行比较

有什么建议吗

if(abs(arr1[i] - arr2[i]) > '1')
   printf("%c ", arr1[i]);
   printf("%c ", arr2[i]);
   printf("%d diff\n", abs(arr1[i] - arr2t[i]));
让我们看一看。例如“2”的值为50,“1”的值为49

现在当你做“2”-“1”时会发生什么?结果如何?是1,不是49

因此,您的比较应该针对整数1,而不是字符“1”


如前所述,printf调用缺少一个{}块。

'1'与1'不同1'相当于ASCII表中的数字49

因此,在您的例子中,将其与整数1进行比较

if(abs(arr1[i] - arr2[i]) > 1)
另外,if块不包括下面的所有行。将需要具有if条件效果的语句用{}括起来


您的错误是将int与char进行比较。 您可以看到,每个字符都以字符的形式显示给用户,但在内存中表示为int,即该字符的ASCII码。 以相同的方式,您可以通过以下方式创建字符:

char c = 49;
它将是字符“1”

因此,当您将其与字符“1”进行比较时,编译器认为您指的是字符1的ASCII代码,即49,您可以看到,如果您在numpad中键入ALT+49。
只需将减法的结果与int 1进行比较,就可以了

“1”->1?从我所看到的,AR2TH-ARR2,您需要{}来定义IF块,例如IFABAR1[i] ARR2[i]>1′{Prtff%C,ARR1[i];Prtff%C,ARR2[i];Primtf%d DIF\n,Ababr1[i] -AR2Tt[i];},您知道“1”=49?为什么它被标记为C++?C和C++是不同的语言,并且在IF之后不要忘记提到丢失的块{}。
char c = 49;