2017-12-21 12 views
0

ifステートメントで変数を同じ型の値のリストと比較し、それを読みやすくきれいにするにはどうすればよいですか?変数をif文の値のリストと比較するより読みやすい方法はありますか?

たとえば、次のようなことがありますが、多くの値があり、わかりやすくしたいと考えています。

if ((lst->type == 'p' || lst->type == 'x' || lst->type == 'X' || 
    lst->type == 'o' || lst->type == 'O' || (lst->type == 'd' || 
    lst->type == 'i' || lst->type == 'D')) 
+1

'if'演算子を? OK .... –

+0

_ "読みやすくする" _、改行を入れて、さまざまな可能性を揃える。また、あなたの特別なネストされた '()'のセットは無意味です。あるいは、 'switch'と' case'も同様の状況で動作しますが、これはそうではないかもしれません。 –

+0

フォールスルーの 'switch'の場合はオプションですが、それがどんな_better_であろうと思います。 –

答えて

5

strchr機能を使用してこれを処理するための最も簡単な方法:strchrについて

const char *lookups = "pxXoOdiD"; 
if (strchr(lookups, lst->type)){ 
    // Do your thing here to handle the condition 
} 

詳しい情報を見つけることができます。

C文字列strの最初の文字の出現を指すポインタを返します。

1

ルックアップテーブルを使用するか、またはswitchのステートメントのいずれかを使用:

const char lookup[] = {'p', 'x', 'X', 'o', 'O', 'd', 'i', 'D'}; 
for (int i = 0; i < sizeof(lookup)/sizeof(*lookup); i++){ 
    if (lst->type == lookup[i]) { 
     // Your stuff 
     break; // Remember to break 
    } 
} 
switch (lst->type) { 
    case 'p': case 'x': case 'X': case 'o': 
    case 'O': case 'd': case 'i': case 'D': 
     // Your stuff 
} 
関連する問題