ページ 11

if文などの条件式について

Posted: 2010年6月14日(月) 14:21
by しろ
if文などの条件式の表記について質問です。

C言語の規則としてif文の中の条件などで
a==b==cのような表記は認められているのでしょうか?

それとも(a==b) && (b==c)のような表記をしないとだめでしょうか?


手元の資料には特に記載がなかったので……

よろしくお願いいたします。

Re:if文などの条件式について

Posted: 2010年6月14日(月) 14:32
by たいちう
> a==b==cのような表記は認められているのでしょうか?

認められていますが、おそらく実行結果は意図とは違ったものになるでしょう。
色々試してみてください。
if (2 == 1 == 0)
    printf("True!\n");
else
    printf("False!\n");

Re:if文などの条件式について

Posted: 2010年6月14日(月) 17:06
by しろ
ご回答いただきありがとうございます。

今コンパイラがないので確認できませんが、帰宅次第いろいろ試してみて、結果をこちらに記入させていただきます。

よろしくお願いいたします。

Re:if文などの条件式について

Posted: 2010年6月14日(月) 19:13
by Ultimate
if(a==b&&b==c){
文章
}

の形のほうが無難だと思います。

大した手間ではないので、そうするべきだと思います。

それがだめということもありませんが、たいちうさんが言うように、意図と違う結果を招きかねません。

Re:if文などの条件式について

Posted: 2010年6月14日(月) 19:54
by MNS
比較演算子の結果は値になるということと、
if( a == b == c )

if( (a==b) == c )
であることに注意して考えてみてください。

Re:if文などの条件式について

Posted: 2010年6月14日(月) 21:34
by しろ
いろいろ試してみましたが一応a==b==cなども通るようでした。

たいちうさんの

if (2 == 1 == 0)
printf("True!\n");
else
printf("False!\n");

も試したが、これはTrueとなりました。

これは((2==1)==0)が

偽の偽で結局真になるという理解でいいでしょうか?

Re:if文などの条件式について

Posted: 2010年6月14日(月) 22:50
by たいちう
> 偽の偽で結局真になるという理解でいいでしょうか?

その理解で↓の結果を予想できますか?
if (2 == 0 == 1)
    printf("True!\n");
else
    printf("False!\n");

Re:if文などの条件式について

Posted: 2010年6月14日(月) 22:52
by Poco
> これは((2==1)==0)が
>
> 偽の偽で結局真になるという理解でいいでしょうか?

関係演算子は真の場合、1と評価され、偽の場合0と評価されます。
2==1は偽なので、0になります。
その結果(0 == 0)となりますので((2==1)==0)の結果は真となります。

Re:if文などの条件式について

Posted: 2010年6月14日(月) 23:15
by box
> if(a==b&&b==c){
> 文章
> }
>
> の形のほうが無難だと思います。

無難なのではなくて、a,b,cのすべてが等しいことを
判定するためにはそう書かなくちゃダメ。

Re:if文などの条件式について

Posted: 2010年6月15日(火) 07:03
by しろ
なるほど、理解することができました。

ありがとうございました。