본문 바로가기

코딩/객체지향프로그래밍

[C++] 조건문과 반복문 (2)

 

출처: https://commons.wikimedia.org/wiki/File:IF-THEN-ELSE-END_flowchart.png


 

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