알고리즘/기타 개념

[C++] cin과 getline을 같이 사용할 때 필요한 것

천니 2021. 8. 13. 23:57
728x90

어렴풋이 알고 있던 개념을 정리하려고 글을 쓴다.

 

c++로 문제를 풀다보면 cin과 getline을 같이 사용해야될 때가 있다. 이때 주의해야 할 점이 있다.

 

우선 차이점을 살펴보면

 

● cin 은 '\n'을 변수에 담지 않는다. ( 개행 문자를 입력버퍼에 남겨둔다. )

● cin 은 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다.

● getline은 '\n'을 변수에 담는다.

 

예를 들어보자

int main()
{
	int N;
	cin >> N;

	string plans;
	getline(cin, plans);

	char dir;

	for (int i = 0; i < plans.size(); i++)
	{
		dir = plans[i];
		
		cout << dir << ' ';
	}
}

이와 같은 코드가 있을 때 N의 값 5를 입력하면 바로 코드가 종료되어 버린다. 이 이유는 버퍼에 정수 값을 입력한 뒤 누를 엔터('\n')가 그대로 남아있어 getline()에 들어가기 떄문이다. 이를 해결하기 위해 cin.ignore()라는 함수를 사용할 수 있다.

 

int main()
{
	int N;
	cin >> N;
	cin.ignore();
	string plans;
	getline(cin, plans);

	char dir;

	for (int i = 0; i < plans.size(); i++)
	{
		dir = plans[i];
		
		cout << dir << ' ';
	}
}

 

위와 같이 변경하면 cin.ignore()가 입력 버퍼에 있는 내용을 모두 제거해주어('\n' 제거) getline이 정상적으로 동작하게 할 수 있다.

'알고리즘 > 기타 개념' 카테고리의 다른 글

[C++] string의 변환  (0) 2021.08.27
[C++] upper_bound, lower_bound  (0) 2021.08.26
[C++] 배열 초기화 방법 - array, vector  (0) 2021.08.23
[C++] vector 오름차순, 내림차순  (0) 2021.08.18
[C++] 2차원 vector 사용법  (0) 2021.08.13