자라나라
[C언어] if else , break/continue, random, switch 본문
if else
매우 기본적인 형태는 이렇다

조건이 추가되면 if else를 사이에 넣는다. 몇 개가 들어가도 상관없다.

참고로 if문에서 동등함을 표현할 땐 꼭 ==으로 써줘야한다 !
깜빡하고 =이라고 썼다가 출력이 안 돼서 뭐가 문젠지 한참을 들여다봤었다. .
break / continue
if ~ if else ~ else 문에서는 break 사용 불가 (return을 쓰자, 하지만 break 처럼 순차적으로 탈출하는 게 아니므로 신중하게 쓰기)
일단 아래의 예시를 보자
이 반에는 1~30번까지 있다.
오늘은 5번까지 청소를 하고 나머지는 집에 가는 날. 이걸 if문으로 표현해보자
이렇게 하면 어떨까

왠지 결과는 안 봐도 뻔하다
1~5번 학생까지 발표를 하라고 할 것이고, 그 후엔 6~30번까지. 즉 25번의 "나머지는 집에 가세요"와 "n(n=6~30)번 학생 집에 가세요"가 번갈아 가면서 뜰 것이다.1

역시나다. 그럼 이번엔 이렇게 해보자.

이렇게 하면 1~5까지는 발표하라고 할 것이고 6~30까지는 집에 가라고 할 것이다.

정답이다. 그런데 우리가 원한 건 이게 아니다.
1~5번학생에게 발표공지를 주고,
'나머지는 집에 가세요'는 단 한 번이면 충분하다.
이럴 때 필요한 게 break다.


i= 1~5까지 잘 작동하다가 i = 6에서 "나머지는~" 문장을 만나자마자 for문을 탈출했다.
이게 break이다.
이번엔 다른 조건으로 가보자.
1~5번까지 발표를 마쳤고, 다음시간 6~30번까지 발표를 하게 되었다.
그런데 7번이 결석한 상황


당연하게도 7번 결석 후에 발표하라는 문장도 이어 나온다.
여기서 continue를 써보자


반복문에서 continue를 만나게 되면 뒤에 따라오는 내용은 패스하고 바로 i++으로 넘어가게 된다.
random
선택지 내에서 랜덤값을 하나 뽑고 싶을 때가 있다.
기본 형태를 예시와 함께 살펴보자

헤더파일에 time.h가 추가되었다.
이는 시간관련 함수를 모아놓은 라이브러리이다. 이는 이후에 제대로 알아보기로 하자.
그 밑엔 stdlib.h , 스탠다드라이브러리를 추가했는데 이는 C 언어의 표준 라이브러리로, 문자열 변환, 사 난수 생성, 동적 메모리 관리 등의 함수들을 포함하고 있다.
개발환경에 따라 time.h가 안 먹힐 경우 stdlib.h를 추가하면 문제없이 돌아갈 것이다.
여기서 핵심은
int num = rand() % 3; 이 부분
num은 3개의 숫자(0~2) 중 랜덤으로 하나를 뽑게 하는 변수가 된다.
만약 1~3 중에 뽑고 싶으면 int num = rand() % 3 + 1; 로 만들어주면 된다.
위의 예시를 디버깅해보면 할 때 마다 0~2 값이 랜덤으로 바뀌어가며 나타난다.
여기에는 난수를 초기화하는 srand(time(NULL))이 중요한 역할을 한다.
아래의 예시를 보자


0~9까지의 랜덤수를 5번 뽑아내는 반복문이다.
그러나 몇번을 다시 디버깅해도 결과는 17409만 나온다.
여기에 srand(time(NULL))을 추가해보자



계속 다른 값이 나오는 걸 확인 할 수 있다.
이를 이용해 가위바위보를 만들어보자

랜덤에 대해 배워봤으니 이제 이를 이용해 switch문을 만들어보자
똑같이 가위바위보로 가보세
switch case

선택지가 많을 때는 switch문이 보기에 훨씬 깔끔하고 작성이 쉽다.
여기서 default는 else와 같다고 보면 된다. (물론 위의 경우에 0,1.2 이외의 값이 나올 리는 없다)

바위가 나온 거까진 좋은데 뒤의 case까지 같이 출력된다

case마다 break를 잊지말자
이번엔 랜덤이라는 개념보다는 switch에 중점을 두고,
이전에 했던 학생구분하기 if문을 switch문으로 나타내보자.

음 이렇게 범위를 따지는 경우엔 if문이 적절하겠다.
상황에 맞게 switch, if문을 효율적으로 쓰자
이제 if else와 랜덤을 이용해 up & down 게임을 만들어보자!


3번째 줄을 주석처리하면 결과를 숨긴 채로 게임을 할 수 있다.
'C언어' 카테고리의 다른 글
[C언어]포인터와 배열의 크기 (0) | 2022.04.25 |
---|---|
[C언어] 배열(array)[1] 선언, 초기화 (0) | 2022.04.15 |
[C언어] 함수 (0) | 2022.04.12 |
[C언어] 반복문 (0) | 2022.03.24 |
[C언어] printf scanf (0) | 2022.03.21 |