- ベストアンサー
if文の中のif文・・・について
質問させていただきます。 if文の中のif文の記述の仕方について質問があります。 例えば if ( x > 0 ){ a = b+c; if ( a > 1) d = e+f; ・・・1 if ( a < 1) d = e-f; ・・・2 if ( a = 1 ) d = 1-g; ・・・3 } h = d + i; aが1より大きい場合は、1の処理を、aが1より小さい場合は2の処理を、aが1と同じであった場合、3の処理をして最終的に、h = d + i;の式の d に代入して h を求めたいと思っているのですが、うまくゆきません。 if文の中のif文の記述はどのようにすればよいのでしょうか? よろしければご教示よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
既に回答があるとおり、等しいことを確かめるには「==」を使用します。 ところで、これはC言語において、よくあるミスです。 「=」はただの代入演算子であり、右辺の値を左辺に代入します。 そして「=」は評価結果として左辺に代入された結果の値を返します。 よって、 if (a = 1) // 処理 は a = 1; if (a) // 処理 と同等です。つまり、この場合であれば、 if (1) // 処理 となります。ifなどは0を偽、0以外を真として扱うので、 // 処理 は必ず実行されます。 一方「==」は、両辺が等しければ1を、そうでなければ0を返します。 なお、if (a = 1)といった表記は、上記のとおりに解釈されるため、特にエラーにはなりません。ただし、==と書くつもりでタイプミスの結果=となったのか、意図した記述なのかの判断が難しく、このような記述は避けるほうが無難です。
その他の回答 (5)
- Interest
- ベストアンサー率31% (207/659)
悪いところが分かりました。 if( a = 1 ) // これがダメ d = 1 - g; ここは、 if( a == 1 ) // これならOK d = 1 - g; と書かないと「aが1と同じであった場合」になりません。 だって、 a = 1 では「aに1を代入する」ですから。 フォントによって見分けがつかないかもしれませんが、 比較するときは == (イコールが2回)ですよ。 ケアレスミスを防ぐためには、 if( 1 == a ) d = 1 - g; と書くといいかも。
- LegaC2
- ベストアンサー率52% (224/428)
うまくいかないとは、どういう結果を指していますか? 恐らく期待している回答と結果が違うのだとは思いますが、どう違うのかが判らなければ、指摘は難しいと思います。 ですので、具体的に、どうダメなのかを教えてください。 ただ、気になる点として、 if ( a = 1 ) とありますが、 if ( a == 1 ) と記述すべきです。
- Interest
- ベストアンサー率31% (207/659)
上手くいかない、というのは具体的にどうなるのでしょうか? if(x > 0){ a = b + c; if( a > 1 ){ d = e + f; } else if( a < 1 ){ d = e - f; } else{ /* a == 1 */ d = 1 - g; } h = d + i; } これでOK?
- Tasuke22
- ベストアンサー率33% (1799/5383)
失礼、case は switch ~ case ですね。
- Tasuke22
- ベストアンサー率33% (1799/5383)
if分の使い方としてはいいと思います。 最後の a=1 がいけないんじゃないでしょうか? なお、このような場合は case を使うことをお奨 めします。
お礼
皆様回答ありがとうございます。 皆様がおっしゃられている通り = が足りなかっただけでした。 分かりやすく解説なども頂き感謝しております。 おかげさまで問題は解決いたしました。 どうもありがとうございます。