お久しぶりです
構造体の配列(?)で例えば
typedef struct{
int flag
B[5]
}A
typedef struct{
int flag
}B
雰囲気だけ伝える為に今適当に作ったので微妙にミスってるかも知れませんが、こんな感じの状態の時に、Bのflagが全て0だったらAのflagを0にする、という処理がしたいのですが、for文やif文を使って色々考えたのですが、どうも上手いやり方が思いつきません
1個ずつ確認するというやり方だと、実際のコードではもっとBがいっぱいあるので、コードが汚くなってしまいます…
どうすれば上手く出来るか、どなたかご教授お願いします
構造体には変数を追加しても構いません
環境はBorandC++を使っています
flagの確認について
Re:flagの確認について
memcmp関数という指定の変数(構造体含む)のメモリ内容が同じかチェックする関数があります。
あらかじめ、Aのflagを0にする時のBの設定(今回なら全て0)の構造体CheckBを作っておいて
または全てのフラグをintで定義しておいて
構造体は多様な変数・クラスを宣言できるので一括でチェックしたい場合は
ある程度上記のような(全部intにする)制限が必要となります。
あらかじめ、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の確認について
返信ありがとうございます!!
教えて頂いたmemcmpをちょっと工夫して使ったら、やりたかった事が出来ました!
これで弾切れにもなりません
本当に助かりました!ありがとうございました!
教えて頂いたmemcmpをちょっと工夫して使ったら、やりたかった事が出来ました!
これで弾切れにもなりません
本当に助かりました!ありがとうございました!