if文の条件式が複数の場合の簡潔な実装

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

if文の条件式が複数の場合の簡潔な実装

#1

投稿記事 by syuneru » 1年前

プログラミングを初めて1年の者です.よろしくお願いいたします.
c言語において,以下のようにif文の条件式が複数がある場合について,
単純に書き下すのは見栄えがよくない上に,arr[100]のような場合は大変なので,for文で繰り返したいと考えました.

コード:

int i = 6; \\変数
int arr[6] = {2,4,1,9,5,8};
if((i != arr[0])&&(i != arr[1])&&(i != arr[2])&&(i != arr[3])&&(i != arr[4])&&(i != arr[5])){
	//処理
}
そこで,次のような実装を行うとfor文で記述できますが,変数も増えて少し複雑になってしまいました.
このような場面において,もっと簡潔に実装することはできないのでしょうか.

コード:

int i = 6; \\変数
int arr[6] = {2,4,1,9,5,8};
int check = 1;
for (int j = 0; j<6; j++) {
	if(i == arr[j]) check = 0;
}
if (check == 1) {
	//処理
}
何かよい実装方法や助言等頂けましたら幸いです.
よろしくお願いいたします.

開発環境
c言語 gcc Cygwin windows10 vscode

参照魚
記事: 109
登録日時: 6年前

Re: if文の条件式が複数の場合の簡潔な実装

#2

投稿記事 by 参照魚 » 1年前

ご提示のコードが最も簡潔だと思います。トリッキーな記述を駆使すれば見かけ上は簡潔にすることもできるとは思いますが、可読性や安全性などとのトレードオフになってしまいます。C++であればテンプレートという機能で可能なんですが。

syuneru

Re: if文の条件式が複数の場合の簡潔な実装

#3

投稿記事 by syuneru » 1年前

上述のコードが最も簡潔であるとのことで,自信を持つことができました.
可読性や安全性という観点は確かに重要ですね.
C++のテンプレートについても初めて聞いたので,調べてみます.
ご回答ありがとうございました.

参照魚
記事: 109
登録日時: 6年前

Re: if文の条件式が複数の場合の簡潔な実装

#4

投稿記事 by 参照魚 » 1年前

なお、下記の方が少しベターです。

コード:

for (int j = 0; j<6; j++) {
	if(i == arr[j]) {
		check = 0;
		break; // 一つでも条件を満たさなければ、残りは確認する必要がないので for から抜ける
	}
}

返信

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