我有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语句中比较的正确语法是什么?
答案 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'))