06.01 - if 조건문 (if conditional statement)
C++에서 가장 기본적인 조건문은 if 명령문이다. (if statement)
if (expression) // conditional expression
statement
or
if (expression) // conditional expression
statement
else
statement2
위에서 'expression'을 조건식(conditional expression)이라고 한다. 조건식이 true
(0이 아님)로 평가되면 if
문이 실행된다. 표현식이 false
로 평가되면 else
문이 실행된다(else 문이 있는 경우).
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int x;
std::cin >> x;
if (x > 10)
std::cout << x << "is greater than 10\n";
else
std::cout << x << "is not greater than 10\n";
return 0;
}
여러 개의 명령문 실행 (Executing multiple statements)
여러 개의 명령문을 실행하기 위해 블록(block)을 사용할 수 있다.
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int x;
std::cin >> x;
if (x > 10)
{
// x > 10 인 경우 아래 블록의 명령문들이 실행된다.
std::cout << "You entered " << x << "\n";
std::cout << x << "is greater than 10\n";
}
else
{
// x <= 10 인 경우 아래 블록의 명령문들이 실행된다.
std::cout << "You entered " << x << "\n";
std::cout << x << "is not greater than 10\n";
}
return 0;
}
암시적 블록 (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
문을 함께 연결할 수 있다.
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int x;
std::cin >> x;
if (x > 10)
std::cout << x << "is greater than 10\n";
else if (x < 10)
std::cout << x << "is less than 10\n";
else
std::cout << x << "is exactly 10\n";
return 0;
}
위 코드는 아래 예제와 같게 실행된다.
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int x;
std::cin >> x;
if (x > 10)
std::cout << x << "is greater than 10\n";
else
{
if (x < 10)
std::cout << x << "is less than 10\n";
else
std::cout << x << "is exactly 10\n";
}
return 0;
}
첫째, x > 10
을 평가한다. true
이면 "is greater than 10\n"이 출력되고 완료된다. 그렇지 않으면 else
문이 실행된다. 해당 else
문은 중첩된 if
문 포함하고 있다. 중첩된 if
문 안에서 x < 10
을 평가한다.
if 문 중첩 (Nesting if statements)
if
문을 다른 if
문 내에 중첩할 수 있다.
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int x;
std::cin >> x;
if (x >= 10) // outer if statement
// 이런 식으로 if 문을 중첩하는 것은 나쁜 코딩 스타일이다.
if (x <= 20) // inner if statement
std::cout << x << "is between 10 and 20\n";
// 이 else 문은 어디에 속해있을까?
else
std::cout << x << "is greater than 20\n";
return 0;
}
위 프로그램에서 else
문은 어디에 속해있을까? 답은 else
문이 같은 블록의 마지막 일치하지 않는 if
문과 쌍을 이룬다는 것이다. 따라서 위의 프로그램에서 else
는 내부 if
문과 일치한다.
복잡한 명령문을 중첩할 때 이러한 모호함을 피하려고 일반적으로 명령문을 블록으로 묶는 것이 좋다.
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int x;
std::cin >> x;
if (x >= 10)
{
if (x <= 20)
std::cout << x << "is between 10 and 20\n";
else // attached to inner if statement
std::cout << x << "is greater than 20\n";
}
return 0;
}
if 문의 논리 연산자 사용하기 (Using logical operators with if statements)
또한, if 문에서 논리 연산자를 사용하여 여러 조건을 함께 확인할 수 있다.
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x;
std::cin >> x;
std::cout << "Enter another integer: ";
int y;
std::cin >> y;
if (x > 0 && y > 0) // &&(논리 AND 연산자): 두 조건이 모두 참인지 확인한다.
std::cout << "both numbers are positive\n";
else if (x > 0 || y > 0) // ||(논리 OR 연산자): 어느 한 조건이상이 참인지 확인한다.
std::cout << "One of the numbers is positive\n";
else
std::cout << "Neither number is positive\n";
return 0;
}
번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/52-if-statements/ 입니다.