Namespaces
Variants

do-while loop

From ko.cppreference.net

조건 expression 의 값이 false가 될 때까지 statement 를 반복적으로 실행합니다. 테스트는 각 반복 후에 이루어집니다.

목차

구문

attr-spec-seq  (선택 사항) do statement while ( expression ) ;
attr-spec-seq - (C23) 루프 문에 적용되는 속성 의 선택적 목록.
statement - 루프의 본문인, 일반적으로 복합 문인 임의의 문 .
expression - 표현식 의 스칼라 타입 . 이 표현식은 각 반복 후에 평가되며, 0과 비교하여 같으면 루프가 종료됩니다.

설명

do - while 문은 statement (또한 루프 본문 이라고 함)이 expression (또한 제어 표현식 이라고 함)이 ​ 0 ​ 과 같을 때까지 반복적으로 실행되도록 합니다. 이 반복은 루프 본문이 정상적으로 진입되었는지 또는 goto 에 의해 statement 의 중간으로 진입되었는지에 관계없이 발생합니다.

표현식 의 평가는 명령문 의 각 실행 후에 발생합니다(정상적으로 진입했거나 goto 에 의해 진입했는지 여부와 관계없이). 제어 표현식이 루프 본문 전에 평가되어야 하는 경우, while 루프 또는 for 루프 를 사용할 수 있습니다.

루프 실행을 특정 지점에서 종료해야 하는 경우, break statement 를 종료 문으로 사용할 수 있습니다.

루프 실행을 루프 본문 끝에서 계속해야 하는 경우, continue 문 을 단축키로 사용할 수 있습니다.

관찰 가능한 동작(입출력, volatile 접근, atomic 또는 동기화 연산)이 없는 무한 루프를 가진 프로그램은 해당 루프의 statement 나 expression 어느 부분에서도 관찰 가능한 동작이 없을 경우 미정의 동작을 가집니다. 이는 컴파일러가 종료됨을 증명하지 않고도 모든 관찰 불가능한 루프를 최적화하여 제거할 수 있도록 합니다. 유일한 예외는 expression 이 상수 표현식인 루프입니다; do { ... } while ( true ) ; 는 항상 무한 루프입니다.

다른 모든 선택 및 반복문과 마찬가지로, do-while 문은 블록 범위 를 설정합니다: 표현식 내에서 도입된 모든 식별자는 문 이후에 범위를 벗어납니다.

(C99부터)

참고 사항

부울 및 포인터 표현식은 종종 루프 제어 표현식으로 사용됩니다. 부울 값 false 와 모든 포인터 타입의 null 포인터 값은 0과 동일하게 비교됩니다.

키워드

do , while

예제

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    // 단순한 예제
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // 루프 본문은 단일 표현식 문입니다
    while(n < SIZE);
    puts("Array filled!");
    n = 0;
    do
    { // 루프 본문은 복합 문입니다
        printf("%d ", array[n]);
        ++n;
    } while (n < SIZE);
    printf("\n");
    // K&R itoa()의 루프. do-while 루프는
    // 항상 최소한 하나의 숫자가 생성되기 때문에 사용됩니다
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // 역순으로 다음 숫자 가져오기
    while ((num /= 10) > 0);
    s[i] = '\0';
    puts(s);
}

가능한 출력:

Array filled!
1 0 1 1 1 1 0 0
4321

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.8.6.3 do 문 (p: 156)
  • C17 표준 (ISO/IEC 9899:2018):
  • 6.8.5.2 do 문 (p: 109)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.8.5.2 do 문 (p: 151)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.8.5.2 do 문 (p: 136)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.6.5.2 do 문

참고 항목

C++ 문서 for do - while loop