- 후위 표현식 => ex) x++
이는 피연산자 뒤에 연산자가 오는것을 말한다. 이는 값을 먼저 리턴하고 부가효과가 일어난다.
- 전위 표현식 => ex) ++x
이는 피연산자 앞에 연산자가 오는 것을 말한다. 이는 부가효과가 일어난 후에 값을 리턴한다.
#include<iostream> using namespace std; int main() { unsigned int c{ 5 }; cout << "후위표현식 예시" << endl; cout << c << endl; //5 cout << c++ << endl; //5 cout << c << endl; //6 c = 5; cout << "전위표현식 예시" << endl; cout << c << endl; //5 cout << ++c << endl; //6 cout << c << endl; //6 return 0; }
이처럼 후위표현식은 값을 리턴한 후, 부가효과(+1)을 해준다. 반대로 전위표현식은 부과효과(+1)을 먼저하고, 값을 리턴한다.
반복문에는 while문, for문 do-while문이 존재한다.
while 문은 조건이 참이면 문장을 실행한다. 그 후에 다시 조건으로 가서 참, 거짓을 판별한다. 참이면 또 실행해서 거짓일 때까지 문장을 실행하는 방식이다.
이는 while문의 대표적인 예시이다. 반복문 이전에 카운터 변수를 초기화 및 선언을 해준다. 그 이후에 반복문 내부에서 이 값을 증가 또는 감소시켜, 반복문을 활용하고 종료시킨다.
//카운트 제어 while문 예시 #include<iostream> using namespace std; int main() { int counter = 0; //카운터 변수 선언 및 초기화 while (counter < 5) { //5회 반복 cout << "Hello world!!" << endl; counter++; } return 0; }
이 while문은 특정 이벤트가 발생하면 반복문을 종료한다. 데이터 처리에서 센티널은 처리 중지를 나타내기 위해 데이터 리스트에 존재하는 특별한 항목이다. 말이 어렵기 때문에 코드로 바로 보겠다.
#include<iostream> using namespace std; int main() { int sum = 0; int num; cout << "정수를 입력하시오(종료하려면 -1 입력): "; cin >> num; while (num != -1) { sum += num; cout << "정수를 입력하시오(종료하려면 -1 입력): "; cin >> num; } cout << "합 = " << sum; return 0; }
여기서는 센티넬이 -1 이다. -1을 받으면 반복문 종료
우선 EOF란, End Of File의 약자로 더이상 데이터를 읽지 않을때 쓴다. 사용 방법은 Ctrl+z이다.
#include<iostream> using namespace std; int main() { int sum = 0; int num; cout << "첫 번째 숫자를 입력하세요(종료하려면 EOF 입력): "; while (cin >> num) { sum += num; cout << "다음 숫자를 입력하세요: "; } cout << "합 = " << sum; return 0; }
여기서 중요한것은 while문 조건에 들어있는 cin>>num이다. 이는 원래 값을 받는 역할을 하지만, 조건문 안에 들어있다면, true or false로 값을 가진다. 처음에 int형으로 선언을 해줬기 때문에 정수를 입력하면 true인 것이다. 만약 비정상적으로 EOF, 'a' 같은 다른 자료형이 들어간다면 이는 false로 취급한다.
#include<iostream>
using namespace std;
int main() {
int num;
bool flag = true;
while (flag) {
cout << "입력하세요: ";
flag=static_cast<bool>(cin >> num);
}
}
플래그 제어 반복문은 while 조건 안에 bool형을 넣는 것이다. 이 코드에서도 flag를 조건으로 세워 값이 잘 들어갔다면 반복, 비정상적인 값이 들어가면 while 문을 탈출하게 했다.
do-while문의 경우, 앞서 설명한 이벤트 제어 반복문으로 사용하는 것이 일반적이다. 이것에 가장 중요한 점은
적어도 한번의 반복
이다. 본문을 적어도 한번은 실행할 때 많이 사용된다.
#include<iostream>
using namespace std;
int main() {
int num;
short leftDigit;
cout << "음수가 아닌 정수를 입력하세요: ";
cin >> num;
do
{
leftDigit = num % 10;
num = num / 10;
} while (num > 0);
cout << "가장 왼쪽의 숫자 = " << leftDigit << endl;
return 0;
이렇듯 적어도 반복문을 한번은 실행한다. 이렇듯 적어도 한번은 실행할 때 do-while문을 사용하면 된다.
for문의 구조는 for(초기화(변수); 조건; 변경){실행할 문장} 이다.
#include<iostream>
using namespace std;
int main() {
for (int num{0}; num<10; num++){ //0~9까지 출력
cout << num << endl;
}
return 0;
}
- return 구문
=> 이 구분은 현재 함수를 종료하고 함수를 호출한 쪽으로 제어를 리턴한다. 반복문에서 return 구문을 사용하면 반복문이 종료되며, 동시에 반복문이 소속된 함수(main함수 등)도 종료
- break문
=> 반복문 내부에서 break 구문을 사용하면 반복을 중간에 종료하고 반복문을 벗어남.
- continue 구문
=> 이 구문을 만나면 아래 문장을 실행하지 않고, 곧바로 다시 올라가 표현식부터 실행하게 된다.
- goto 구문
=> 이 구문을 만나면goto 레이블
에서 그 레이블로 곧바로 이동한다. 하지만 이는 코드가 어지러워질 수 있기 때문에 쓰지말자.
//continue 예시 코드![](https://velog.velcdn.com/images/sean2337/post/a69a1b88-640b-4481-a740-7d9b9d88edd0/image.png)
#include<iostream>
using namespace std;
int main() {
int num;
short leftDigit;
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
cout << i << endl;
}
return 0;
}
이처럼 i가 5일때는 출력하는 문장을 실행하지 않고 곧바로 올라간다.