1. 비정상적인 루프 종료
1. break구문
#include <iostream>
using namespace std;
int main() {
int input, sum = 0;
cout << "Enter numbers to sum, negative number ends list: ";
while(true) {
cin >> input;
if (input < 0)
break; //바로 반복문 빠져나감
sum += input;
}
cout << "Sum = " << sum << endl;
}
- break: 반복문을 수행하다가 break를 만나면 바로 반복문 실행 종료, 빠져나와 다음 줄을 실행함
- if(input < 0)이 true이면 break 실행 → while문 아래 cout 실행
2. continue구문
#include <iostream>
using namespace std;
int main() {
int input, sum = 0;
cout << "Enter numbers to sum, negative number ends list: ";
while(true) {
cin >> input;
if (input < 0)
continue; //아래 코드 무시하고 다시 while문 조건으로 돌아감
sum += input;
}
cout << "Sum = " << sum << endl;
}
- continue: 반복문을 수행하다가 continue를 만나면 그 아래의 나머지 코드는 무시하고 다시 반복문 처음으로 돌아가서 조건 검사
- if(input < 0)이 true면 실행 → while(true)인지 검사
*) 1.1~1.2 example
#include <iostream>
using namespace std;
int main() {
int num;
while (true) {
cout << "Enter the number (0, 10]: ";
cin >> num;
if (num <= 0 || num > 10) {
continue;
}
else
break;
}
cout << "Success!" << endl;
return 0;
}
3. goto구문
- 원하는 곳으로 jump 할 수 있음 but Don't Use!! (암묵적으로 금지됨)
2. do-while구문
do
/* do something */
while (/* 실행 조건 */);
do
{
/* do something #1
...
do something #n */
} while (/* 실행 조건 */);
- 일단 do 안의 내용 실행 !!
- do-while문 끝에는 반드시 [;] 찍어줘야 함! do{ } while( );
- 실행문이 한 줄이면 { } 생략 가능, 여러 줄이면 생략 불가능
- while: 조건식 → body 실행 → 조건식
- do while: body 실행 → 조건식 → body 실행 (순서의 차이)
*)2 example
#include <iostream>
using namespace std;
int main() {
int input;
do {
cout << "Enter the number (0, 100]: ";
cin >> input;
} while (!(input > 0 && input <= 100)); // 원하는 범위 내의 숫자를 입력받을 때까지 입력받음
cout << "Success!" << endl; // 원하는 범위 내에 있다면 입력받기 멈추고 출력함
return 0;
}
3. for구문
//while문
int i = 0; //초기값 (initialization)
while(i < 10) { //조건 (condition)
cout << i << '\t'; //실행 (statement)
i++; //업데이트되는 값 (modification)
}
//for문
for(int i = 0; i < 10; i++) { //초기값; 조건; 업데이트
cout << i << '\t';
}
- while문과의 차이: 반복문의 core component(초기값; 반복 조건; modification)을 한 줄에 모아놓음
- 반복 조건에 true라 써주면 무한 loop
- modification 끝에 는 [;] 쓰지 않음
- initialization은 딱 한 번만 시행됨 → int i = 0;으로 지정해줬다면 for문 안에서만 살아있는 local variable
- nested for문 가능 (for문안에 for문 중첩, 안쪽에 있는 for문 종료되면 빠져나와서 그 아래 구문 실행)
4. switch구문
switch(/* key */)
{
case /* char 타입 */ :
/* do something */
break;
case /* char 타입 */ :
/* do something */
break;
default :
/* do something */
break;
- key(조건)이 어느 case에 부합하는지를 확인함
- 위의 모든 case 이외의 경우를 처리하고자 할 때는 default (if-else구문의 else라고 생각!)
- switch는 하나만 참인 case 라도 그 아래의 모든 case를 다 실행함 (default 문도) → 각 case마다 반드시 break를 걸어줘야 함! (해당 case만 실행하고 나머지는 탈출하도록)
- if-else문과 유사함 / switch문은 if-else문으로 다 바꿀 수 있지만 if-else문은 switch문으로 모두 바꿀 수는 없음 (if-else만으로 다 할 수 있다는 얘기)
*)4 example
#include <iostream>
using namespace std;
int main() {
char key;
cout << "Enter a key (p or q): ";
cin >> key;
switch (key) {
case 'P':
case 'p':
cout << "Pause" << endl;
break;
case 'Q':
case 'q':
cout << "Quit" << endl;
break;
default:
cout << "Invalid key" << endl;
break;
}
return 0;
}
- case ' ' : 여러[개 ... 적고 실행문 하나] [break;] 하면 여러개의 case중 하나만 만족해도 실행됨
*)sample codes: https://github.com/halterman/CppBook-SourceCode
반응형
'코딩 > 객체지향프로그래밍' 카테고리의 다른 글
[C++] String, File - 문자열과 파일 (2) (0) | 2020.07.25 |
---|---|
[C++] String, File - 문자열과 파일 (1) (0) | 2020.07.23 |
[C++] 조건문과 반복문 (1) (0) | 2020.07.18 |
[C++] 함수(2) (0) | 2020.07.15 |
[C++] 함수(1) (0) | 2020.07.14 |