C代码和条件的正确语法

时间:2012-06-21 20:13:47

标签: c if-statement

我有C代码,我声明了一些变量:char c[8][8]; int pos[2][2];(k和l是整数),我把一些条件作为:

if('a' <= c[pos[k][l]][pos[k][l+1]]<='z'){...}else{...} 

其中条件验证字符c[pos[k][l]][pos[k][l+1]]是'a'和'z'之间的某个字母。但我总是得到相同的错误信息

line ..: warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning

问题肯定非常简单,但在if语句中比较的正确语法是什么?

5 个答案:

答案 0 :(得分:4)

这里的问题是C解析

a <= b <= c

作为

(a <= b) <= c

含义“检查是否a≤b。然后,取该比较的结果(0或1)并检查它是否小于c。这与检查是否≤一点完全不同b≤c,编译器错误试图警告你,你所写的内容和你可能想要的数学表达式不一样。

要解决这个问题,正如其他人所提到的那样,将条件分为两个检查,然后将它们合并在一起。在一般情况下,这将被重写为

if (a <= b && b <= c) {
    ...
}

在你的情况下,你会写

if ('a' <= c[pos[k][l]][pos[k][l+1]] && c[pos[k][l]][pos[k][l+1]] <= 'z') {
   ...
}

希望这有帮助!

答案 1 :(得分:1)

使用逻辑 AND 运算符&&并将条件分为两部分:

if('a' <= c[pos[k][l]][pos[k][l+1]] && c[pos[k][l]][pos[k][l+1]] <='z')

答案 2 :(得分:1)

您需要使用&& AND 运算符将其拆分为布尔表达式:

if (('a' <= c[pos[k][l]][pos[k][l+1]]) &&
    (c[pos[k][l]][pos[k][l+1]] <= 'z'))

更好的是:

char ch;

... 

ch = c[pos[k][l]][pos[k][l+1]];
if (('a' <= ch) && (ch <= 'z'))
    ...

答案 3 :(得分:1)

您需要使用两个比较和布尔逻辑。

类似的东西:

 if('a' <= c[pos[k][l]][pos[k][l+1]] && c[pos[k][l]][pos[k][l+1]] <='z'){...}

答案 4 :(得分:1)

你需要使用像AND(&&这样的逻辑运算符)尝试一下这样的事情:

if(('a' <= c[pos[k][l]][pos[k][l+1]])&&(c[pos[k][l]][pos[k][l+1]] <= 'z'))