본문 바로가기
개발/C, C++

[c/c++] while문

by 77monkey 개발자 2023. 8. 17.
반응형

for문이라는 산을 넘었으니 이제 while문은 쉬울 것으로 생각된다.

자, while문은 편한 마음으로 시작해 보도록 하자.

 

while문 형식

while (조건)
{
	//코드
}

원하는 조건을 만족하는 동안에 while문 중괄호 블록이 반복된다. 

for문을 보고 왔기 때문에 그럼 자연스럽게 조건에 들어가는 변수 증감을 whilㄷ문 중괄호 블록에서 하겠군아 했으면, 바로 맞다!

초기화는 그럼 어디에서 하겠는가? while문 들어가기 전에 하면 된다.

for문으로 표현이 된다면 while문으로도 표현할 수 있고, 

while문으로 표현이 된다면 for문으로 표현이 된다.

 

while문 예시

#include <stdio.h>

int main() {
	int i;

	i = 0; 
	while (i < 10) {
		printf("%d\n", i);
		i++;
	}

	return 0;
}

간단하게 0부터 9까지 출력하는 코드를 작성해 보았다.

while문 조건에 해당하는 변수 i를 while문 사용하기 전에 초기화를 해준다. 

안 그러면 무한 루프에 빠질 수 있다. 

위 코드같은 경우에는 i를 0으로 초기화를 했다.

그리고 while문의 조건으로 들어온다.

i가 10보다 작기 때문에 while문 중괄호 블록으로 들어와서 i 변수를 출력한다. 

여기서 주의깊게 볼 부분은 i를 증가하는 것이다.

그렇지 않고 i 증가를 빼먹게 된다면 무한루프에 빠지게 되고 0만 계속 출력할 것이다.

잊지 말자...

우리가 예상한 결과와 실제 결과를 보면 아래와 같다.

0
1
2
3
4
5
6
7
8
9

 

while문 무한 루프 형식

while(1) {
	//코드
}

조건이 1로 되어 있으면 조건이 항상 참이기 때문에 계속 반복하게 된다. 

임베디드 개발을 할 경우에 hw 동작에 따라서 특정 레지스터가 set 되거나 clear 되는 것을 기다려야 할 때가 있다. 

이 때 while문 무한 루프를 많이 사용하게 된다. 

 

while문 무한 루프 예시

예시를 들어보면, 아래와 같다.

#include <stdio.h>

int main() {

	while (1) {
		if (a_register_set())
			break;
	}
	return 0;
}

a_register_set() 함수를 정의하지 않았는데, 이 함수가 있다고 한다면 이 함수가 언젠가는 0이 아닌 어떤 값으로 설정이 되면 break문을 통해서 while문을 빠져나가게 된다.

for문으로 써도 되냐고 묻는다면, 된다. 

 

마무리

while문에 대해서는 이 정도 알면 될 것으로 보인다. 

뒤이어 포스팅할 do while문에 대해서만 알게 된다면, while 관련해서는 다 봤다고 생각한다.

갑자기 떠올랐는데 linked list 자료구조를 만들 때에도 while문을 썼던 것 같다.

(for문을 써도 상관없지만, 코딩 스타일이 사람마다 다르기 때문에 양해 부탁한다.)

반응형

'개발 > C, C++' 카테고리의 다른 글

[c/c++] switch문  (0) 2023.08.21
[c/c++] do while문  (0) 2023.08.20
[c/c++] for문 (2)  (1) 2023.08.16
[c/c++] for문  (0) 2023.08.16
[c/c++] if 문  (0) 2023.08.14