Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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`라고 써버렸습니다. `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)

AltStyle によって変換されたページ (->オリジナル) /