• ベストアンサー

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文の記述はどのようにすればよいのでしょうか? よろしければご教示よろしくお願いします。

  • ostk
  • お礼率77% (24/31)

質問者が選んだベストアンサー

  • ベストアンサー
  • S117
  • ベストアンサー率40% (18/45)
回答No.6

既に回答があるとおり、等しいことを確かめるには「==」を使用します。 ところで、これはC言語において、よくあるミスです。 「=」はただの代入演算子であり、右辺の値を左辺に代入します。 そして「=」は評価結果として左辺に代入された結果の値を返します。 よって、 if (a = 1) // 処理 は a = 1; if (a) // 処理 と同等です。つまり、この場合であれば、 if (1) // 処理 となります。ifなどは0を偽、0以外を真として扱うので、 // 処理 は必ず実行されます。 一方「==」は、両辺が等しければ1を、そうでなければ0を返します。 なお、if (a = 1)といった表記は、上記のとおりに解釈されるため、特にエラーにはなりません。ただし、==と書くつもりでタイプミスの結果=となったのか、意図した記述なのかの判断が難しく、このような記述は避けるほうが無難です。

ostk
質問者

お礼

皆様回答ありがとうございます。 皆様がおっしゃられている通り = が足りなかっただけでした。 分かりやすく解説なども頂き感謝しております。 おかげさまで問題は解決いたしました。 どうもありがとうございます。

その他の回答 (5)

  • Interest
  • ベストアンサー率31% (207/659)
回答No.5

悪いところが分かりました。 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)
回答No.4

うまくいかないとは、どういう結果を指していますか? 恐らく期待している回答と結果が違うのだとは思いますが、どう違うのかが判らなければ、指摘は難しいと思います。 ですので、具体的に、どうダメなのかを教えてください。 ただ、気になる点として、  if ( a = 1 ) とありますが、  if ( a == 1 ) と記述すべきです。

  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

上手くいかない、というのは具体的にどうなるのでしょうか? 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)
回答No.2

失礼、case は switch ~ case ですね。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

if分の使い方としてはいいと思います。 最後の a=1 がいけないんじゃないでしょうか? なお、このような場合は case を使うことをお奨 めします。

関連するQ&A

  • if文の中にfor文なのか、for文の中にif文なのか

    for文の中に分岐を作って計算するのと、if文を先に書いてからfor文にするのとではどちらが一般的ですか? for ( i = 0; i < n; i++) { if ( a > b ) { y = i; } else { y = i * 2; } printf( "%d", y ); } とするか、 if ( a > b ) { for ( i = 0; i < n; i++) { y = i; } } else { for ( i = 0; i < n; i++) { y = i * 2; } } printf( "%d", y ); とするかという事です。 ちなみにプログラムは適当ですのでちょっとしたミスはご勘弁ください。 個人的には後者の方が分岐が少ない分負担は減ると思うのですが、前者の方がすっきりとしているのでこちらを使いたいのです。 もちろん、微々たる差なので好きな方を使えという意見もあると思いますが、皆さんはどちらを使いますか?

  • if文で困っています。

    define A 5 void main(void) int i; scanf("%d", &i); if (i <= A){ このような形をつくったのですが、if文のところで質問があります。 「数字をいくつか入力し、その入力したデータ数が5つより少ないときに・・・」というようなプログラムにしたいのですが、この場合、「入力した数値が5.0以下であるときに・・・」というプログラムになっているのではないかと、困っています。どちらが正しいのでしょうか?

  • IF文について

    A以上B以下という処理条件を記述しているんですが、この以外のものが来たらIF文を出るようにしたいんですが、どのように記述すれば良いのでしょうか? マクロだと、確か"Exit ~"で抜けれたと思うんですが、どなたか教えて下さい。

  • if文の中に

    例えば if(a<0){ if(a<b) c=a+b } ように if文の中にif文を入れる事はできるのですか? また、if-else文はif() →else if() →elseと続きますが、 これ以降(4つ以上の選択肢) に繋げたい時はどうすればいいですか? 教えて下さい!

  • 文章を一文一文として処理するについて

    最近Perlの勉強を始めたものですが、文章を一文一文として処理することが出来なくてすごく困っています。 例えば、 B a I b I c I d B e I f I k I m B h I n が入力されたとき B 4 a I 3 b I 2 c I 1 d B 5 e I 4 f I 3 k I 2 m I 1 m B 2 h I 1 n を出力されたいのです。 B を区きり文字として、いろいろやってみましたが、うまく出来ませんでした。何方か分かりやすい説明して頂ければ大変有難いのです。

  • シェルスクリプトのif文

    シェルスクリプトのif文について質問です。 あるファイルが存在しないときだけ処理を行いたい場合、 下記のような記述をするしかないのでしょうか? if [ -e /tmp/test.txt ]; then  ダミー処理(val1=1など意味のない処理)  (ダミー処理を入れるのは何も書かないとエラーとなってしまうため) else   行いたい処理 fi elseを使わずに if  fi だけですますことはできないでしょうか? -eはファイルが存在するならば真なので 逆に意味が真となるようにしたいのですが・・・

  • if文について

    if文について 初心者です。 if文において、下記のような記述は間違いでしょうか? if(a==1) a=2; よろしくお願い致します。

  • エクセルの条件文で抽出したセルに改行を入れたい

    条件文で作成した文字列内に改行を入れる方法を教えてください。 下記のようなエクセル(以後、数百行あります)があり、○がついているところの1行目にある文字をK2セルに入力したいと思います。   A  B  C  D  E  F  G  H  I  J K  1 あ い う  え  お  か  き  く け  こ   2 ○       ○       ○    ○  ○ 3   ○      ○    ○  ○ K2セルには、○印のついている あ え き け こ と改行して出力されるように関数を組むにはどうしたらいいのでしょうか? =IF(A2=○,A1&"","")&IF(B2=○,B1,"")&IF(C2=○,C1,"")&IF(D2=○, D1,"")&IF(E2=○,E1,"")&IF(F2=○,F1,"")&IF(G2=○,G1,"")&IF(H2=○,H1,"")&IF(I2=○,I1,"")&IF(J2=○,J1,"") と入力してみましたがうまくいかず、これではうまくいったとしても 改行なしで あえきけこ と出てしまう気がします・・・。 一晩悩みましたがどうしてもうまくいかないのでどなたか教えてください。 よろしくお願いいたします。

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

  • If ~Then文

    2つの方法をIf ~Then文により処理したいと思います。 A1~I1のどこかに「価格」文字が入っています。 その「価格」がA1なら(1)パターンを実行、それ以外なら(2)パターンを実行 *(2)パターン実行時は「価格」セルを探してから。(E1) (1)パターン m = ActiveSheet.Range("A3").End(xlDown).Row Range("A1:E" & m).Select Range("B1:E" & m).Select Selection.ClearContents Range("F1").Select (2)パターン n = ActiveSheet.Range("A3").End(xlDown).Row Range("E1:I" & n).Select Selection.Cut Range("A1").Select ActiveSheet.Paste Range("F1").Select お願い致します。

専門家に質問してみよう