-1

疑似コードを C コードに変換しようとしていますが、次のような条件があります。

if (-4 <= X <=8)
THEN {Do Something}
else
{Do something else}

if ステートメントの構文は有効ですか? 論理条件の変数の前に定数を置いて真偽値をチェックすることはできますか?

4

5 に答える 5

8

Cでは、次のような条件を書くことはできません

if (-4 <= X <= 8) {
     // ...
} else {
     // ...
}

代わりに、これを 2 つの個別のチェックに分割する必要があります。

if (-4 <= X && X <= 8) {
     // ...
} else {
     // ...
}

このコードは完全に問題ありません。演算子の両側に好きなオペランドを指定できます<=

于 2013-06-10T20:05:18.530 に答える
4

はい、C の論理チェックの左側の引数として定数を使用できます。

ただし、リストした疑似コードは 2 つの式に分割する必要があります。

if ((-1 <= X) && (X <= 8))

補足: 多くの開発者は、エラーが発生しやすい特定の比較でコンパイル エラーが発生するため、論理ステートメントの「左側に定数」スタイルを好みます。if (X == 3)例: 評価したかったのに誤って を入力したとしましょうif (X = 3)。代入演算が True を返すため、後者は完全に有効な C 式です。「左定数」スタイルを使用する if (3 = X)と、コンパイル エラーが発生するため、多くの時間を節約できます。

于 2013-06-10T20:07:26.507 に答える
3

いいえ; それはうまくいきません。

-4 <= Xは 0 または 1 で、常に 8 未満です。

于 2013-06-10T20:05:50.143 に答える
1

if ステートメントの構文は有効ですか? 論理条件の変数の前に定数を置いて真偽値をチェックすることはできますか?

構文が正しいかどうかはわかりませんが、equality\inequality 演算子のテストの前にリテラル定数を配置するのが一般的です。お気に入り:

if(7==x) {...} else {...}

一部のプログラマーはこれを好みます。これは、等値\不等式\大なり演算子のテストで 2 番目の「=」記号を誤って忘れた場合、次のように、テストではなくリテラルへの変数の割り当てを受け取るためです。

if(x=7) //danger! you're assigning to variable 'x' value of '7',
        //which will return true,  as a side-effect
//now (x==7)==true

また、C 言語には 'THEN' キーワードがありません。言語の発明者は、それが冗長であると判断しました。明らかに理解しやすいのは、if テストの後に何かがある場合、おそらくこのコードを実行することです。お気に入り

if(SOME_MAGIC_CONST==a) 
{
     //There couldn't be anything else at all! else can't follow if immediately, so...
}
else {
     //yep, keyword  'THEN' is redundant...
}
于 2013-06-10T20:12:32.550 に答える