while문

while문은 특정 조건을 만족하는 동안 반복해서 수행해야하는 로직을 처리하는 곳에 주로 사용합니다.
for문의 for( ; 테스트 조건식; )형태와 사실상 같습니다.

 

while (테스트 조건식)
{
    // 처리 로직
}

테스트 조건식은 비교문, 변수, 수식 등이 올 수 있으며, 그 결과 값이 0이면 실행을 중지하고 0이 아닌 동안 지속적으로 수행이 됩니다. while문의 처리 로직이 1개의 문장으로만 구성되었다면 중괄호{ }을 생략할 수 있으나, 항상 붙여주는 것이 좋습니다.

while문의 실행은 condition의 값이 0인지 여부를 판단하고, 0이 아니면 처리 로직부분을 수행하기를 계속 반복합니다.

 

예제). for문 대신 증감 형태 사용시

int sum;
int idx;
int value[100];

...

sum = 0;
idx = 0;
while (idx <= 100)
{
    sum += value[idx];
    idx++;
}

위와 같이 for( )문과 달리 시작값 설정부, 증감부분이 별도로 없기 때문에 시작값은 while 호출 전에 증감은 while문의 block내에 존재해야 합니다. 위와 같이 증감을 통한 반복문의 경우에는 while문 보다는 for문을 사용하는 것이 좋습니다.

 

 

예제). 2개의 문자열의 내용이 같은 지 여부를 판단하는 함수

int string_compare(const char *str1, const char *str2)
{
    unsigned char *tmp1 = (unsigned char *)str1;
    unsigned char *tmp2 = (unsigned char *)str2;
    
    while( (*tmp1 != 0x00) && (*tmp1 == *tmp2)) {
        tmp1++;
        tmp2++;
    }
    
    return (*tmp1 == *tmp2) ? 0 : (*tmp1 > *tmp2) ? 1 : -1; 
}

위와 같이 pointer를 이용하여 데이터를 처리하는 경우에는 while문을 사용하는 것이 편리합니다.

 

 

무한 반복문

while (1)
{
    // 처리 로직
}

whie문의 condition 부분에 0이 아닌 상수값이 위치하면 무한 반복문이 되며, 이 무한 반복문을 종료하려면 처리 로직에서 if ~ else문에 break문으로 while문을 종료할 수 있습니다. 무한 반복문은 daemon 프로그램에 주로 사용되는 기본 구조입니다. daemon 프로그램의 특성상 절대로 종료하지 않는 프로그램이기 때문에 무한 반복문을 사용합니다.

 

break 문과 continue문

break문은 반복문의 실행을 중단하고 block을 빠져나가라는 용도로 사용하며, continue문은 continue 문 아래 부분은 skip하고 while( )문의 테스트 조건식부터 다시 실행하라는 의미입니다.

 

 

예제). 홀수면 무시하고, 짝수면 더하고, 0 이하면 종료

int  idx;
long sum;
long arr[100];

......

idx = 0;
sum = 0; 

while(idx < 100)
{
    if(arr[idx] % 2 == 1) {
        idx++;
        continue;
    } else if(arr[idx] <= 0) {
        break;
    }
    sum += arr[idx];
    idx++;
}

위의 예제는 100 개의 데이터가 저장된 arr 변수에서 데이터가 짝수값이면 합산하고, 홀수이면 버리고, 0이하이면 while문을 종료하라는 예제입니다. while문 테스트 비교식(idx < 100)이 참이면 계속 실행하라는 의미입니다.

위의 소스 처럼 continue문을 사용하면 아래부분이 실행되지 않게 되고, 증감 부분이 실행되지 않아서 idx < 100에서 무한 반복이 발생할 수 있으므로 continue 앞쪽에 idx++를 추가적으로 로직이 포함되어야  합니다.

break문은 while문의 실행을 끝내라는 의미입니다.

 

 

 

 

C Programming Language 문법

1. C 프로그래밍 언어는? 2. C언어 개발 환경 (실습 환경) 3. C언어의 컴파일 과정 4. C 소스 파일 구성 5. 주석문(Comment) 6. 식별자 명명 규칙 7. C 프로그래밍의 시작 - 함수 8. 변수와 상수 (정수형) 9. 변..

www.it-note.kr

 

 

'C언어 > 문법' 카테고리의 다른 글

18. 배열 (配列: array)  (0) 2019.11.06
17. 반복문 (do ~ while)  (0) 2019.11.04
16. 반복문 (while)  (2) 2019.11.04
15. 반복문 (for)  (2) 2019.11.03
14. 조건문 (switch ~ case)  (2) 2019.11.02
13. 조건문 (if ~ else if ~ else)  (0) 2019.10.31
블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

Tag ,

댓글을 달아 주세요

  • 김민성 2019.12.21 16:51  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 글 잘보고 있습니다. 질문이 있어 댓글을 작성합니다.

    "예제). 2개의 문자열의 내용이 같은 지 여부를 판단하는 함수" 코드의 마지막 return 부분에서,

    "return (*tmp1 == *tmp1) ? 0 : (*tmp1 > *tmp2) ? 1 : -1;"

    에서 조건연산자의 첫번째 조건인 "*tmp1 == *tmp1" 은 "*tmp1 == *tmp2" 의 오타인가요?

    그리고 두 문자를 비교하는 함수에서 같으면 1 다르면 0 을 반환하면 될것 같은데, 두번째 조건부분을 통해 -1 을 반환하는 목적은 무엇인가요?