You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 7-control-flow/README.md
+12-13Lines changed: 12 additions & 13 deletions
Original file line number
Diff line number
Diff line change
@@ -377,7 +377,7 @@ The pointer is pointing to some integer: 25
377
377
378
378
## 조건 연산자(conditional operator)
379
379
380
-
[5장](../5-basic-operators)에서 연산자의 분류에 대해 설명했을 때, 피연산자가 세 개인 `삼항 연산자(ternary operator)`가 있다고 소개했습니다. 지금까지의 연산자는 단항 연산자이거나 이항 연산자였는데요, 삼항 연산자는 딱 하나 존재하는데, 바로 `조건 연산자(conditional operator)`입니다. 조건 연산자는 다음과 같이 씁니다.
380
+
[5장](../5-basic-operators)에서 연산자의 분류에 대해 설명했을 때, 피연산자가 세 개인 `삼항 연산자(ternary operator)`가 있다고 소개했습니다. 단항 연산자나 이항 연산자와 달리, C의 삼항 연산자는 딱 하나인데요, 바로 `조건 연산자(conditional operator)`입니다. 조건 연산자는 다음과 같이 씁니다.
381
381
382
382
```
383
383
<조건식> ? <조건식이 참일 때 결과값을 얻을 식> : <조건식이 거짓일 때 결과값을 얻을 식>
@@ -440,7 +440,7 @@ while문은
440
440
2.`<조건식이 참일 때 실행할 문장>`을 실행합니다.
441
441
3. 1로 돌아갑니다.
442
442
443
-
이렇게 동작합니다. 다음 예제를 봐주세요.
443
+
다음 예제를 봐주세요.
444
444
445
445
```c
446
446
#include<stdio.h>
@@ -482,7 +482,7 @@ break문은 반복문 안에서 조건문의 결과에 상관없이 반복문을
482
482
break;
483
483
```
484
484
485
-
즉, break문 안에는 식을 전혀 넣을 수 없습니다.
485
+
즉, break문은 식이 필요없는 문장입니다.
486
486
487
487
```c
488
488
#include<stdio.h>
@@ -806,7 +806,7 @@ int main()
806
806
807
807
for문의 초기식, 조건식, 반복식은 모두 생략이 가능합니다. 초기식이나 반복식이 생략되는 것은 쉽게 이해할 수 있습니다. `for (; <조건식>;) <실행문>`처럼 쓰면 `while (<조건식>) <실행문>`이 되는 것과 큰 차이가 없습니다.
808
808
809
-
```
809
+
```c
810
810
for ([초기식]; <조건식>; [반복식]) <실행문>
811
811
812
812
->
@@ -823,7 +823,7 @@ for ([초기식]; <조건식>; [반복식]) <실행문>
823
823
824
824
여기서 `[초기식]`과 `[반복식]`만 생략하면 되니까요. 변수 선언문이 포함된 경우도 마찬가지입니다.
825
825
826
-
```
826
+
```c
827
827
for (<변수 선언문> <조건식>; [반복식]) <실행문>
828
828
829
829
->
@@ -882,22 +882,19 @@ int main()
882
882
883
883
반복문은 조건식이 참이면 주어진 문장을 계속 수행합니다. 조건식으로 `1`이나 `2`이나, `20 < 100`처럼 결정값이 항상 참으로 간주되는 값인 식을 사용하면 반복문은 영원히 반복되게 됩니다. 이런 반복문을 `무한 루프(infinite loop)`라고 부릅니다. 방금 다룬 예제도 무한 루프를 사용한 프로그램입니다.
884
884
885
-
프로그램의 종류에 따라 무한 루프를 사용해야하는 경우도 있지만, 대부분의 프로그램의 경우엔 무한 루프를 사용할 일이 없습니다. `무한 루프에 갇히다`라는 표현이 있을 정도로 무한 루프가 실행 중인 상황은 대게 버그가 발생한 경우입니다. 예를 들어, 주어진 배열의 원소를 거꾸로 출력하는 프로그램을 만들어보려고 합니다.
885
+
프로그램의 종류에 따라 무한 루프를 사용해야하는 경우도 있지만, 대부분의 프로그램의 경우엔 무한 루프를 사용할 일이 없습니다. `무한 루프에 갇히다`라는 표현이 있을 정도로 무한 루프가 실행 중인 상황은 대게 버그가 발생한 경우입니다. 예를 들어, 1부터 10까지의 정수를 거꾸로 출력하는 프로그램을 만들어보려고 합니다.
886
886
887
887
```c
888
888
#include<stdio.h>
889
889
890
890
intmain()
891
891
{
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);
897
894
}
898
895
```
899
896
900
-
그런데, 원래 `--i`라고 써야 하는 걸 `++i`라고 써버렸습니다. `i >= 0`은 항상 `1`이 됩니다. 반복문의 조건식이 항상 참이니 무한 루프가 됩니다. 이처럼 무한 루프가 발생한 경우엔 보통 좋지 않은 일이 일어났을 가능성이 높습니다. 그래서 조건식에 항상 참이 되는 식을 넣지는 않았는지 확인하고, 혹시 `1`을 꼭 넣어야 한다면 break문을 적절히 사용할 필요가 있습니다.
897
+
그런데, 원래 `--i`라고 써야 하는 걸 `++i`라고 써버렸습니다.
8174
`i >= 1`은 항상 `1`이 됩니다. 반복문의 조건식이 항상 참이니 무한 루프가 됩니다. 이처럼 무한 루프가 발생한 경우엔 보통 좋지 않은 일이 일어났을 가능성이 높습니다. 그래서 조건식에 항상 참이 되는 식을 넣지는 않았는지 확인하고, 혹시 `1`을 꼭 넣어야 한다면 다음 예제처럼 break문을 적절히 사용할 필요가 있습니다.
901
898
902
899
```c
903
900
#include<stdio.h>
@@ -932,4 +929,6 @@ Sum: 65
932
929
933
930
> 위 예제처럼 break문이 실행될 수 있는 가능성이 충분히 있으면 조건식이 `1`이라고 하더라도 무한 루프라고 부르지 않습니다.
934
931
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`을 입력하면 반복문을 종료하게 만들 수 있습니다.
0 commit comments