flagの確認について

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

flagの確認について

#1

投稿記事 by あ~る » 16年前

お久しぶりです
構造体の配列(?)で例えば

typedef struct{
   int flag
   B[5]
}A

typedef struct{
   int flag
}B

雰囲気だけ伝える為に今適当に作ったので微妙にミスってるかも知れませんが、こんな感じの状態の時に、Bのflagが全て0だったらAのflagを0にする、という処理がしたいのですが、for文やif文を使って色々考えたのですが、どうも上手いやり方が思いつきません
1個ずつ確認するというやり方だと、実際のコードではもっとBがいっぱいあるので、コードが汚くなってしまいます…
どうすれば上手く出来るか、どなたかご教授お願いします
構造体には変数を追加しても構いません
環境はBorandC++を使っています

ねこ

Re:flagの確認について

#2

投稿記事 by ねこ » 16年前

memcmp関数という指定の変数(構造体含む)のメモリ内容が同じかチェックする関数があります。
あらかじめ、Aのflagを0にする時のBの設定(今回なら全て0)の構造体CheckBを作っておいて
if( memcmp( A.B, CheckB ) == 0 ) A.flag = 0;
とかする。使う際は構造体をきちんと0で初期化しておかないといけないので注意して下さい。

または全てのフラグをintで定義しておいて
int* pData = (int*)&B;
bool flgSame = true;
for( int ii = 0; ii < sizeof( B ) / sizeof( int ); ii++ )
{
	if( *(pData+ii) != 0 )
	{
		flgSame = false;
		break;
	}
}
というようにB構造体の中のintデータを総チェックしていく方法があります。

構造体は多様な変数・クラスを宣言できるので一括でチェックしたい場合は
ある程度上記のような(全部intにする)制限が必要となります。

あ~る

Re:flagの確認について

#3

投稿記事 by あ~る » 16年前

返信ありがとうございます!!
教えて頂いたmemcmpをちょっと工夫して使ったら、やりたかった事が出来ました!
これで弾切れにもなりません
本当に助かりました!ありがとうございました!

閉鎖

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