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 |