C++ Chapter 5.2 : 반복문(while, do-while, for)과 점프(break, continue, goto)
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
while
반복문
형태
while (반복조건)
{
}
while (1)
{
// 무한 루프
}
- for문과 다르게 몇번 반복해야하는지 반복횟수 변수를 따로 설정해야 하는 경우가 많다.
break
로 while문을 빠져나올 수 있다.
예시 1 : count 변수가 static
일 때
while (1)
{
static int count = 0;
cout << count << endl; // 0 1 2 3 4 5 6 ... 무한으로 출력될 것
++count;
}
static
변수의 초기화는 첫번째 실행시에만 되며 변수 값이 메모리 안에 계속 유지된다. 따라서 반복 때마다 새롭게 count 변수가 선언되는것이 아닌 기존 count 값이 계속 유지가 되는 식이다. 따라서 0 1 2 3 4 5 … 수가 무한으로 출력될 것.
while (1)
{
int count = 0;
cout << count << endl; // 0 0 0 0 0 ... 0만 무한으로 출력될 것
++count;
}
static
을 떼면 일반 지역변수가 되버린다. 따라서 while문 내에서 다음 반복 때마다 count 변수가 새로 선언되고 새로 0으로 초기화되기 때문에 0이 무한으로 출력되게 된다.
예시 2 : count 변수의 데이터 타입을 unsigned int
로 한다면
unsigned int count = 10;
while (count >= 0)
{
if (count == 0) cout << "zero";
else cout << count << " ";
count--;
}
- count 변수 값 감소시
overflow
문제가 발생할 수 있다. “10 9 8 7 6 5 4 3 2 1 zero” 까지는 잘 출력되는데 count가 -1, 즉 음수가 될 때부터는 이상한 값들이 무한으로 출력되기 시작함.- count값은
unsigned
이기 때문에 음수를 표현할 수 없고 따라서 음수가 되자마자 unsigned가 표혈할 수 있는 양수 최대값으로 순환하게 된다. - count는 음수가 되지않고 반복 조건에 계속 해당되어 무한 루프에 빠지게 된다.
- count값은
unsigned
가 빠르고 최적화에 좋긴 하다.- unsigned를 사용할 경우 count 변수 값이 반복 때마다 감소될 경우 overflow 문제 조심할 것.
예시 3 : 이중 while문
int outer_count = 1;
while (outer_count <= 5)
{
int inner_count = 1;
while (inner_count < outer_count)
{
cout << inner_count++ << " ";
}
cout << endl; // 개행
++outer_count;
}
/* 출력
1
1 2
1 2 3
1 2 3 4
*/
- 큰 while문은 매번 반복할 때마다 inner_count 변수를 새로 선언하고 1로 초기화 할 것임.
- 반복조건이
while (inner_count <= outer_count)
라면 1 2 3 4 5 까지 출력될 것.
do-while
반복문
- 반드시 1번은 실행한다.
- 그냥 while문은 반복조건에 처음부터 해당되지 않으면 아예 반복을 시작하지도 않을 수 있다.
int main() { int selection; do { cout << "1. add" << endl; cout << "1. add" << endl; cout << "1. add" << endl; cout << "1. add" << endl; cin << selection; } while (selection <= 0 || selection >= 5); }
int selection
이게do
안에서 선언되면while
의 반복 조건에서 selection 값을 확인할 수가 없다.- do 안에서 선언되면 do의
{ }
범위 안에서만 사용할 수 있는 지역변수가 되기 때문 ! - while의 반복 조건
( )
와는 다른 범위다.
- do 안에서 선언되면 do의
cin << selection;
반드시 1번은 입력을 받으니까 무조건 1번은 입력을 꼭 받는다.- 반드시 1번 이상은 반복적으로 실행해야하는 경우 사용하기 좋다.
- while 뒤에
;
붙여주기
for 반복문
형태
for ( A; B; C)
{
D
}
- A B D C B D C B D C … 순으로 실행된다.
- A : 반복자 초기화.
- B : for문 반복 조건 따짐. 참이면 다음 반복으로 이동
- C : 다음 반복시 반복자 변화
- D : 반복할 내용
- for문의 무한 루프 :
for(;;;)
점프
break문
break
: 현재의 반복문 하나를 빠져 나감
continue문
continue
: 다음 반복으로 건너뛴다.
int count = 0;
do
{
if (count == 5)
continue;
cout << count << endl;
count++;
} while (count < 10);
- 위 코드는 무한 루프에 빠지게 된다.
if (count == 5)
에 걸릴 때continue
되고 또 if문을 만나 continue되어 count 값이 무한으로 5를 유지하게 되기 때문이다. - 위와 같은 문제를 방지하기 위해 while문 조건문 안에서 count 증감을 해주기도 한다.
while (++count < 10);
goto문
- goto 라벨이름
- 해당 라벨으로 이동해라 !
- goto문은 잘 안쓰인다. 스파게티 코드가 될 가능성이 높아서.
double x;
tryAgain : // label
cout << "Enter a non-negative number" << endl;
cin >> x;
if (x < 0.0) // 음수 입력했으면
goto tryAgain; // 다시 입력하게끔 ! 입력 전에 위치한 라벨로 이동함
cout << sqrt(x) << endl;
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기