2017-09-16 40 views
-3

我是C的新手,并且遇到了一些非常基本的东西。简单的'if'语句在C语言与char类型的比较中表现不如预期的那样

我有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])); 
+1

''1'' - >'1'?和'arr2t' - >'arr2' – BLUEPIXY

+4

从我看到的,你需要'{}'来定义你的'if'块。 if(abs(arr1 [i] - arr2 [i])>'1'){printf(“%c”,arr1 [i]); printf(“%c”,arr2 [i]); printf(“%d diff \ n”,abs(arr1 [i] - arr2t [i])); }'? –

+0

你知道''1'== 49'? – user0042

回答

1

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

所以要对整数1的比较,你的情况

if(abs(arr1[i] - arr2[i]) > 1) 

而且你if块不包括下面的所有线路。将需要生效if条件的语句与{}一起附上。

if(abs(arr1[i] - arr2[i]) > 1) 
{//Add braces to enclose multiple statements 
    printf("%c ", arr1[i]); 
    printf("%c ", arr2[i]); 
    printf("%d diff\n", abs(arr1[i] - arr2[i]));// arr2t[i] -> arr2[i] seems to be a typo 
} 
1

让我们来看看ASCII table。例如, '2'50,并且'1'的值是49

现在当你做'2' - '1'时会发生什么?那是什么结果?它是1,而不是49

所以你的比较应该是针对整数1而不是字符'1'


而且如前所述,你错过了一个块{}printf电话。

+1

别忘了在if()之后提及丢失的块'{}'。 – user0042

1

你的错误是通过比较int与char。 您会发现,每个字符都以字符的形式显示给用户,但在内存中则表示为int,即该字符的ASCII码。 以同样的方式,你可以创建一个char是这样的:

char c = 49; 

,这将是煤焦'1'

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