본문 바로가기

if 조건문 if conditional statement 본문

💘 C++/흐름제어

if 조건문 if conditional statement

Hyonii 2022. 1. 30. 22:57

if 조건문 (if conditional statement)

C++에서 가장 기본적인 조건문은 if 명령문이다

if(expression) //conditional expression
    statement

or

if(expression) //conditional expression
    statement
else
    statement2

위에서 'expression'을 조건식(conditional expression)이라고 한다.

조건식이 true (0이 아님)로 평가되면 if문이 실행된다.

표현식이 false로 평가되면 else 문이 실행된다. ( else 문이 있는 경우)

 

if 문 밑에 indenting(들여쓰기)이 되어있는데 이건 자동으로 해주는거다.

이렇게 바로 문장을 쓰기 보다는 { } 중괄호로 영역을 싸주는게 일반적이다.

암시적 블록 (Implicit blocks)

if 문 또는 else 문의 명령문 부분에 블록을 선언하지 않으면 컴파일러가 암시적으로 선언한다.

if(expression)
    statement
else
    statement2

실제로는 다음과 같다

if(expression)
{
    statement
}
else
{
    statement2
}

초보 프로그래머는 다음과 같은 작업을 시도하려 한다.

#include <iostream>

int main()
{
    if(1)
        int x = 5;
    else
        int x = 6;
    
    std::cout << x;
    
    return 0;
}

컴파일러는 식별자 x가 정의되지 않은 오류를 생성하므로 컴파일되지 않는다.

위의 예제는 다음과 같다.

#include <iostream>

int main()
{
    if(1)
        {
            int x = 5;
        }//변수 x는 여기서 소멸한다
    else
        {
            int x = 6;
        }//변수 x 는 여기서 소멸한다
    
    std::cout << x; //x는 여기서 정의되지 않는다.
    
    return 0;
}

위 예제에서 변수 x 는 블록 범위를 가지고, 블록의 끝에서 소멸한다.

std::cout 행에 도달할 때 까지 x는 존재하지 않는다.

if문 연결하기

if-else 문을 함께 연결 할 수 있다.

 

위 코드는 아래 예제와 같게 실행된다.

첫째, x > 10을 평가한다.

true 이면 "x is greater thaan 10"이 출력되고 완료된다.

그렇지 않으면 else문이 실행된다.

해당 else문은 중첩된 if 문을 포함하고 있다.

중첩된 if문 안에서 x < 10을 평가하게 된다.

여러 개의 명령문 실행

여러 개의 명령문을 실행하기 위해 블록을 사용할 수 있다.

if 문 뒤에 오는 문장이 하나 일 경우에는 중괄호를 생략할 수 있지만

두개이상 넣을 때에는 두 줄이 동시에 실행되게 하려면 꼭 중괄호로 묶어주어야 한다.

파이썬에서는 띄어쓰기로 묶지만 C++에서는 중괄호로 묶어준다.

 

초보 프로그래머가 할 수 있는 실수 예제

bool 계산을 할 때

if 문 괄호안에 내부적으로 0 이 아니면 true 이다.0이면 false 이다.

 

if(1)이면 항상 실행시키고 싶다는 의미

while 문에서도 비슷한 형태를 사용한다.

 

if 문 안에 int x = 5; 라고 선언은 하고 넣는 경우가 있다.

초보 프로그래머들은 블록{}이 안보이기 때문에

전역인가 보다 혹은 main 함수안에서는 전부 작동하는가 보다 착각 할 수 있다.

하지만 얘는 내부적으로 { }가 있다고, if 문 밑에 괄호가 있다고 생각해야 한다.

 

int x는 괄호 밑으로 벗어나는 순간 사라진다. 아무일도 안한것과 같다

물론 if 문 아래 블록에서 변수를 선언하지 말라는 뜻은 아니다.

안에서 복잡한 일을 하게 될 때는 변수를 선언할 수 있다.

그런데 이 변수의 scope 와 duration이 if문 밑의 블록을 벗어 나지 못한다는 의미이다.

if문 중첩 (Nesting if statements)

if문을 다른 if 문 내에 중첩 할 수 있다.

 

이 경우에는 x가 10 이상이고

10이상인것 중에서 x가 20이상이니까

10이상이고 20보다 작은 것이 else 에서 출력이 된다.

 

else가 10이상이 아닐때로 걸리게 하고싶을때는 중괄호로 막아야한다.

 

위 두가지 경우는 서로 완전 다르니까 주의해야 한다.

문법상 else는 가장 가까이에 있는 if 에 붙게 되어있다.

그래서 Indenting이 엉망인 상태에서

코딩을 우연히 이렇게 했더라도

 

이 else는 표시된 if 문에 붙은 걸로 작동을 한다.

인덴팅이 이렇게 되어있는것은 잘못되어있는 거니까

 

적어도 이렇게 인덴팅 해주는 것이 좋다
이렇게 {} 중괄호로 표현해주는 것이 가장 좋다

if문의 논리 연산자 사용하기

또한, if문에서 논리 연산자를 사용하여 여러 조건을 함께 확인 할 수 있다.

 

 


if문의 삼항 연산자 사용하기

정수 두개를 입력받고 둘 중에 작은 것을 입력하는 입력하는 함수를 만들어보자.

 

이 예제를 줄여보면
이렇게 줄일 수도 있고
이렇게 삼항연산자(조건부 연산자)로 줄일 수 도 있다.


if문에 null statement 넣기

초보 프로그래머들이 실수하기 좋은 것은 null statement라고 해서

아예 실행시킬 내용을 넣지 않는 경우도 있다.

 

이 예제는
이것과 같다.

null statement == 아무것도 하지 않는 것

 

문제가 생기는 상황을 예로 들자면

 

이렇게 쓰면 if 문에 전혀 상관없이 x=1;이 항상 실행된다.
null statement를 쓸 때는 주석을 달아서 왜 이렇게 써놓았는지 의도를 표현허는것이 좋다.
이렇게 되면 x=0; if(x)가 되어서
항상 true인 if문이 된다.
최근 비주얼 스튜디오는 이렇게 경고해준다.
이런 경우 주의해야한다.

if문에서 프로그램 종료

if 문은 프로그램을 긴급하게 종료 시킬 때 쓸 수 있다.

 

'💘 C++ > 흐름제어' 카테고리의 다른 글

for 문 for statement  (0) 2022.04.26
do-while 문 do-while statement  (0) 2022.04.26
while 문 while statement  (0) 2022.04.25
goto 문 goto statement  (0) 2022.04.25
switch 문 switch statement  (0) 2022.04.24
Comments