• ベストアンサー

if文の判定について

<環境> WIN98 VC++6.0 MFC  ダイアログベースにて 以下コードにて、タイマーによる変数nの変化に伴い絵1と絵2が切り替わっています。 int n; void CxxxDlg::OnPaint() { 略 m_p9[0].LoadBitmap(IDB_BITMAP1); m_p9[1].LoadBitmap(IDB_BITMAP2); tempDC9.SelectObject(&m_p9[n]); 略 } void CxxxDlg::OnTimer(UINT nIDEvent) { n=n+1; if(n>=2){ n=0; } Invalidate();   CDialog::OnTimer(nIDEvent); } ところがコードの一部を以下のように変更すると、 if文で正しく判定できなくなります。 どうしてなのでしょうか? if (n=0){ m_p9[0].LoadBitmap(IDB_BITMAP1); } m_p9[1].LoadBitmap(IDB_BITMAP2);

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

  • ベストアンサー
回答No.1

> if (n=0){ これは比較ではありません。代入です。 if ( n == 0 ) { ... が正解。

VitaminBB
質問者

お礼

回答ありがとうございます。 #周りのコードの難解さに目が奪われまったく気づきませんでした。 #大ちょんぼでした。

その他の回答 (1)

  • tekebon
  • ベストアンサー率62% (36/58)
回答No.2

ここでのポイントは2つです。 1つは「=」演算子は代入、「==」は比較のための演算子だということです。 2つ目はC言語の審議は「0」が「偽」、「それ以外」が「真」だということです。 if文は丸括弧の中の結果が真か偽かで判断します。 仮にnに3が代入されているとするとif(n==0){}の場合 「n==0」は「nの値が0であれば真、そうでなければ偽」 という意味になりますので結果は「0」つまり偽になります。 if(n=0){}の場合には「nに0を代入し、そのnの値が真か偽か」という意味に なりますので0が代入され、元のnの値が何であろうと「偽」になります。 逆にif(n=10){}と記述した場合には元の値が何であろうと10を代入するので 0以外ですから「真」であることになります。

VitaminBB
質問者

お礼

回答ありがとうございます。 ただのチョンボでした。