3

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

4

5 回答 5

4

这里的问题是 C 解析

a <= b <= c

作为

(a <= b) <= c

意思是“检查 a ≤ b。然后,获取该比较的结果(0 或 1)并检查它是否小于c。这与检查是否 a ≤ 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') {
   ...
}

希望这可以帮助!

于 2012-06-21T20:16:25.897 回答
1

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

if('a' <= c[pos[k][l]][pos[k][l+1]] && c[pos[k][l]][pos[k][l+1]] <='z')
于 2012-06-21T20:15:37.707 回答
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'))
    ...
于 2012-06-21T20:16:19.897 回答
1

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

就像是:

 if('a' <= c[pos[k][l]][pos[k][l+1]] && c[pos[k][l]][pos[k][l+1]] <='z'){...}
于 2012-06-21T20:16:32.067 回答
1

您需要使用 AND ( &&) 之类的逻辑运算符尝试以下操作:

if(('a' <= c[pos[k][l]][pos[k][l+1]])&&(c[pos[k][l]][pos[k][l+1]] <= 'z'))
于 2012-06-21T20:18:28.677 回答