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かどうかを確認することと、コンパイラエラーとはまったく同じではありません。あなたが書いたものとあなたがおそらく意図した数式は同じものではないことをあなたに警告しようとしています。

これを修正するには、他の人が述べているように、条件を2つのチェックに分割してから、それらをANDで結合します。一般的な場合、これは次のように書き直されます。

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'))

さらに良い:

char ch;

... 

ch = c[pos[k][l]][pos[k][l+1]];
if (('a' <= ch) && (ch <= 'z'))
    ...
于 2012-06-21T20:16:19.897 に答える
1

2つの比較とブール論理を使用する必要があります。

何かのようなもの:

 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 に答える
1

論理AND演算子&&を使用して、条件を 2 つの部分に分割します。

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 に答える