간단한 C++ 선언문은 각각 명령어로 이루어진 프로그램이다. 항상 세미콜론으로 끝나고, 보여지는 순서대로 프로그램에서 실행된다.
그러나 프로그램이 꼭 선형의 한 순서로만 이루어져있는 것은 아니다.
프로세스 중에, 프로그램은 일부 코드의 부분을 반복하거나 분기되거나 특정 결정을 내려야 할 수도 있다.
그러기 위해 C++은 프로그램에 맞는 상황에서 flow를 통제하기 위한 선언문들을 가지고 있다.
if는 한 블록이나 선언문을 시행하기 위한 조건 통제를 위해서 사용된다.
if (condition) statement{
//code block;
}
if 뒤에 else가 따라오면 ()안에 있는 조건이 맞을 경우 if 블록 안의 코드를, 아니면 else 블록 안의 코드를 실행한다. 만약 2개보다 많은 케이스를 if로 나타내고 싶으면 if, else if, else를 사용해주면 된다.
while문은 () 안의 조건이 충족되는 한 루프를 계속한다.
int main (){
int n = 10;
while (n>0){
cout << n << ", ";
--n;
}
cout << "end";
}
위의 조건은 n이 while문 안에서 0이 될 때까지 루프를 반복하며 하나씩 줄어드는 숫자를 출력한다.
while문에서 가장 주의해야 할 점은 while문이 언젠가는 끝나야 한다는 것이다! (무한루프 절대 x!)
즉, 언젠가는 () 안의 조건문이 거짓이 되어 while밖으로 나와 정상적인 프로그래밍 종료로 이어질 수 있어야 한다는 것이다.
나는 지금까지 코딩하면서 do while은 안 써봤는데...
do while은 일단 이 선언문을 만나면 조건이 충족 됐든 안 됐든 블록 안의 코드를 무조건 한 번은 하고 (do) 간다는 것이 특징이다.
int main ()
{
string str;
do {
cout << "Enter text: ";
getline (cin,str);
cout << "You entered: " << str << '\n';
} while (str != "goodbye");
}
이 코드를 보면 goodbye를 입력하면 종료가 되는 코드인데, 가장 빠르게 루프를 종료하려고 한다고 해도 enter 과정을 한 번은 거쳐야 하게 되어있다.
do-while 루프의 조건은 do 실행 후 검사한다.
for 루프는 수 번의 반복이 필요할 때 사용한다.
for (initialization; condition; increase) statement;

while처럼 조건이 참일 때 statement를 반복한다.
그러나 이에 더해서, for 루프는 statement로 진입하기 전 확인할 수 있는 '초기화'와 '증가문'을 포함해야 한다.
3가지 조건을 모두 주지 않아도 실행될 수 있다. 그러나 세미콜론은 모두 붙어있어야 한다.
만약 for문이 나오기 전에 사용할 변수를 초기화했으면 첫 번째 칸을 비워두는 등이 가능하다.
그러나 조건이 없는 루프는 무한 루프에 빠지기 때문에 주의해야 한다.
for문은 다른 형태를 가질 수 있다. 특정 범위에 의해 사용되는 경우이다.
for ( declaration : range ) statement;
이 루프는 범위 안에서 반복문을 실행한다.
범위란, 함수가 실행되고 끝나기 위한 요소이다(배열, 타입 등).
int main ()
{
string str {"Hello!"};
for (char c : str)
{
cout << "[" << c << "]";
}
cout << '\n';
}
이 코드에서는 "Hello!"라는 문자열 안에 들어있는 문자 하나하나를 가지고 for문을 반복한다.
break는 반복문 실행 중 만나게 되면 아직 종료를 위한 조건이 충족되지 않았더라도 해당 반복문을 벗어나게 되는 구문이다.
int main ()
{
for (int n=10; n>0; n--)
{
cout << n << ", ";
if (n==3)
{
cout << "countdown aborted!";
break;
}
}
}
이 경우 원래는 n이 10에서 시작해서 하나씩 주는 반복문인데, n이 3이 되면 if문 안의 break에 의해서 루프를 벗어나게 된다.
continue는 프로그램이 남은 루프를 현재 반복 회차에서 건너뛰도록 한다.
마치 이미 반복이 다 끝나고 넘어간 것 처럼 continue를 만나면 밑의 statement를 다 건너 뛰고 다음 반복으로 넘어간다.
goto는 프로그램의 특정 포인트로 점프할 수 있게 해준다. nesting level(여러개 겹쳐진 괄호들)을 무시하고 점프할 수 있다. 그러나 보통 저수준 프로그램에서 사용된다고 한다.
int main ()
{
int n=10;
mylabel:
cout << n << ", ";
n--;
if (n>0) goto mylabel;
cout << "liftoff!\n";
}
이 코드에서는 n이 아직 0보다 크면 mylabel 부분으로 넘어가게 해서 반복문을 만들었다.
switch는 조금 특별하다. 여러가지의 특정하게 정해진 가능성이 있을 때 그 값을 체크하고자 할 때 사용된다.
if-else를 여러개 붙여놓은 것과 비슷하다. 위에서부터 내려오며 실행되며, 중간에 break를 만나지 않는 한 계속 밑으로 가면서 실행된다.
switch (x) {
case 1:
case 2:
case 3:
cout << "x is 1, 2 or 3";
break;
default:
cout << "x is not 1, 2 nor 3";
}
레이블을 사용해서 각각의 케이스를 구분하며, break문이 없으면 break문을 만나거나 블록이 끝날 때까지 계속 작업한다.
만약 일치하는 레이블이 없으면 default 뒤의 명령문을 실행한다.
모든 case 레이블은 고유한 값을 가져야 한다.