- ベストアンサー
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);
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> if (n=0){ これは比較ではありません。代入です。 if ( n == 0 ) { ... が正解。
その他の回答 (1)
- tekebon
- ベストアンサー率62% (36/58)
ここでのポイントは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以外ですから「真」であることになります。
お礼
回答ありがとうございます。 ただのチョンボでした。
お礼
回答ありがとうございます。 #周りのコードの難解さに目が奪われまったく気づきませんでした。 #大ちょんぼでした。