2017-12-21 20 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' 연산자를? 확인 .... –

+0

_ "좀 더 읽기 쉽도록"_, 그냥 줄 바꿈을 넣고 다른 가능성을 맞 춥니 다. 또한 여분의 중첩 된'()'세트는 무의미합니다. 또는'switch'와'case '도 이와 비슷한 상황에서도 작동 할 수 있습니다. –

+0

폴스 스루 (fall-through) '스위치 (switch)'대소 문자는 옵션이지만, 그것이 어떤 것이 든 궁금하다. –

답변

5

가장 쉬운 방법은 strchr 기능을 사용하여이 문제를 처리하기 :

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

더 많은 정보에 대한 strchr

를 찾을 수 있습니다.

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 
}