指定条件までの繰り返し処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C素人

指定条件までの繰り返し処理について

#1

投稿記事 by C素人 » 8年前

指定条件まで繰り返す処理についての質問です。

swの状態に応じて動作が変化します。switch~case文による処理。
case 0x08のとき、繰り返し処理を導入しようと考えています。

行ないたい処理は、
SS=1;
RR=0; という状態を、あるswの状態(0x88)まで続ける

次のコードで試してみているのですが、
case 0x08に入ることはできるのですが、
swの状態が0x88にならなくても、この繰り返し処理から抜けてしまいます。

コードの不備があると思うのですが、原因が分かりません。
教えていただけると助かります。

コード:


while(1){
sw=PORTA &0xF8;
		switch(sw){
			case 0x00:
				SS=0;
				RR=0;
				break;
			case 0x10:
				SS=1;
				RR=0;
				break;
			case 0x08:
        		do {
        			sw = PORTA & 0xF8;  	//スイッチの状態を取得
				SS=1;
				RR=0;
        			} while (!sw==0x88);   
				break;
			default:break;
        	  }
 			prev_sw = sw;

}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 指定条件までの繰り返し処理について

#2

投稿記事 by みけCAT » 8年前

演算子の優先順位を考えると、!の方が==より先に計算されるので、
!sw、すなわち0または1を0x88と比較し、等しくないので繰り返し処理から抜けることになります。

条件式を素直にsw!=0x88にすればいいでしょう。
処理系の仕様、コーディング規約、宗教上の理由などで!=演算子が使えない場合は、!(sw==0x88)とすればいいでしょう。
それもダメな場合は…制約に応じて適当に。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

C素人

Re: 指定条件までの繰り返し処理について

#3

投稿記事 by C素人 » 8年前

みけCATさま

ありがとうございます。
!(sw==0x88)とすることで解決することができました。
解説もしていただき、ありがとうございます。勉強になりました。
sw!=0x88は、コンパイラの制約? でエラーとなってしまいました。

閉鎖

“C言語何でも質問掲示板” へ戻る