알고리즘/기타 개념
[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이 정상적으로 동작하게 할 수 있다.