8000 ✨ 7장 완료 · paxbun/c-cpp-tutorial@ae3c6d9 · GitHub
[go: up one dir, main page]

Skip to content

Commit ae3c6d9

Browse files
committed
✨ 7장 완료
1 parent 1256ab3 commit ae3c6d9

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

7-control-flow/README.md

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ The pointer is pointing to some integer: 25
377377
378378
## 조건 연산자(conditional operator)
379379

380-
[5장](../5-basic-operators)에서 연산자의 분류에 대해 설명했을 때, 피연산자가 세 개인 `삼항 연산자(ternary operator)`가 있다고 소개했습니다. 지금까지의 연산자는 단항 연산자이거나 이항 연산자였는데요, 삼항 연산자는 딱 하나 존재하는데, 바로 `조건 연산자(conditional operator)`입니다. 조건 연산자는 다음과 같이 씁니다.
380+
[5장](../5-basic-operators)에서 연산자의 분류에 대해 설명했을 때, 피연산자가 세 개인 `삼항 연산자(ternary operator)`가 있다고 소개했습니다. 단항 연산자나 이항 연산자와 달리, C의 삼항 연산자는 딱 하나인데요, 바로 `조건 연산자(conditional operator)`입니다. 조건 연산자는 다음과 같이 씁니다.
381381

382382
```
383383
<조건식> ? <조건식이 참일 때 결과값을 얻을 식> : <조건식이 거짓일 때 결과값을 얻을 식>
@@ -440,7 +440,7 @@ while문은
440440
2. `<조건식이 참일 때 실행할 문장>`을 실행합니다.
441441
3. 1로 돌아갑니다.
442442

443-
이렇게 동작합니다. 다음 예제를 봐주세요.
443+
다음 예제를 봐주세요.
444444

445445
```c
446446
#include <stdio.h>
@@ -482,7 +482,7 @@ break문은 반복문 안에서 조건문의 결과에 상관없이 반복문을
482482
break;
483483
```
484484

485-
즉, break문 안에는 식을 전혀 넣을 수 없습니다.
485+
즉, break문은 식이 필요없는 문장입니다.
486486

487487
```c
488488
#include <stdio.h>
@@ -806,7 +806,7 @@ int main()
806806
807807
for문의 초기식, 조건식, 반복식은 모두 생략이 가능합니다. 초기식이나 반복식이 생략되는 것은 쉽게 이해할 수 있습니다. `for (; <조건식>;) <실행문>`처럼 쓰면 `while (<조건식>) <실행문>`이 되는 것과 큰 차이가 없습니다.
808808

809-
```
809+
```c
810810
for ([초기식]; <조건식>; [반복식]) <실행문>
811811

812812
->
@@ -823,7 +823,7 @@ for ([초기식]; <조건식>; [반복식]) <실행문>
823823

824824
여기서 `[초기식]``[반복식]`만 생략하면 되니까요. 변수 선언문이 포함된 경우도 마찬가지입니다.
825825

826-
```
826+
```c
827827
for (<변수 선언문> <조건식>; [반복식]) <실행문>
828828

829829
->
@@ -882,22 +882,19 @@ int main()
882882

883883
반복문은 조건식이 참이면 주어진 문장을 계속 수행합니다. 조건식으로 `1`이나 `2`이나, `20 < 100`처럼 결정값이 항상 참으로 간주되는 값인 식을 사용하면 반복문은 영원히 반복되게 됩니다. 이런 반복문을 `무한 루프(infinite loop)`라고 부릅니다. 방금 다룬 예제도 무한 루프를 사용한 프로그램입니다.
884884

885-
프로그램의 종류에 따라 무한 루프를 사용해야하는 경우도 있지만, 대부분의 프로그램의 경우엔 무한 루프를 사용할 일이 없습니다. `무한 루프에 갇히다`라는 표현이 있을 정도로 무한 루프가 실행 중인 상황은 대게 버그가 발생한 경우입니다. 예를 들어, 주어진 배열의 원소를 거꾸로 출력하는 프로그램을 만들어보려고 합니다.
885+
프로그램의 종류에 따라 무한 루프를 사용해야하는 경우도 있지만, 대부분의 프로그램의 경우엔 무한 루프를 사용할 일이 없습니다. `무한 루프에 갇히다`라는 표현이 있을 정도로 무한 루프가 실행 중인 상황은 대게 버그가 발생한 경우입니다. 예를 들어, 1부터 10까지의 정수를 거꾸로 출력하는 프로그램을 만들어보려고 합니다.
886886

887887
```c
888888
#include <stdio.h>
889889

890890
int main()
891891
{
892-
int arr[] = { 1, 2, 3, 4, 5 };
893-
int len = sizeof arr / sizeof(int);
894-
895-
for (int i = len - 1; i >= 0; ++i)
896-
printf("%d ", arr[i]);
892+
for (int i = 10; i >= 1; --i)
893+
printf("%d ", i);
897894
}
898895
```
899896

900-
그런데, 원래 `--i`라고 써야 하는 걸 `++i`라고 써버렸습니다. `i >= 0`은 항상 `1`이 됩니다. 반복문의 조건식이 항상 참이니 무한 루프가 됩니다. 이처럼 무한 루프가 발생한 경우엔 보통 좋지 않은 일이 일어났을 가능성이 높습니다. 그래서 조건식에 항상 참이 되는 식을 넣지는 않았는지 확인하고, 혹시 `1`을 꼭 넣어야 한다면 break문을 적절히 사용할 필요가 있습니다.
897+
그런데, 원래 `--i`라고 써야 하는 걸 `++i`라고 써버렸습니다. 8174 `i >= 1`은 항상 `1`이 됩니다. 반복문의 조건식이 항상 참이니 무한 루프가 됩니다. 이처럼 무한 루프가 발생한 경우엔 보통 좋지 않은 일이 일어났을 가능성이 높습니다. 그래서 조건식에 항상 참이 되는 식을 넣지는 않았는지 확인하고, 혹시 `1`을 꼭 넣어야 한다면 다음 예제처럼 break문을 적절히 사용할 필요가 있습니다.
901898

902899
```c
903900
#include <stdio.h>
@@ -932,4 +929,6 @@ Sum: 65
932929

933930
> 위 예제처럼 break문이 실행될 수 있는 가능성이 충분히 있으면 조건식이 `1`이라고 하더라도 무한 루프라고 부르지 않습니다.
934931
935-
> `!i`에 주목해주세요. 부정 연산자는 참인 값을 거짓으로, 거짓인 값을 참으로 바꿔줍니다. 즉, `0`이 아닌 식은 `0`으로, `0`인 식은 `1`로 바꿔주는 연산자입니다. 그래서 `i``0`이 아니면 조건식의 결과값이 `0`이 되어 if문 안쪽이 실행되지 않고, `i``0`이면 조건식의 결과값이 `1`이 되어 if문 안쪽이 실행됩니다. 이렇게 사용자가 `0`을 입력하면 반복문을 종료하게 만들 수 있습니다.
932+
> `!i`에 주목해주세요. 부정 연산자는 참인 값을 거짓으로, 거짓인 값을 참으로 바꿔줍니다. 즉, `0`이 아닌 식은 `0`으로, `0`인 식은 `1`로 바꿔주는 연산자입니다. 그래서 `i``0`이 아니면 조건식의 결과값이 `0`이 되어 if문 안쪽이 실행되지 않고, `i``0`이면 조건식의 결과값이 `1`이 되어 if문 안쪽이 실행됩니다. 이렇게 사용자가 `0`을 입력하면 반복문을 종료하게 만들 수 있습니다.
933+
934+
[다음: 함수](../8-functions)

0 commit comments

Comments
 (0)
0