c++에서 cin을 사용할 경우 띄어쓰기와 개행을 구분하기가 어렵습니다.
getline()이라는 함수를 사용하면 한 줄 입력이 편리해지는데 이때 istream에 속한 geline과 string에 속한 getline에는 차이가 존재합니다.
cin.getline(char str, streamsize n);
cin.getline(char str, streamsize n, char dlim);
getline(istream& is, string str);
getline(istream& is, string str, char dlim);
단 string의 getline을 사용할 경우 cin은 개행문자 '\n'을 buffer에 저장해두므로 문제를 일으킬 수 있어 cin.ignore();를 꼭 해주어야 합니다.
int n;
string str;
cin >> n;
cin.ignore();
getline(cin, str);
위와 같은 경우 버퍼에 남아있는 '\n'을 읽어들여 getline이 공백을 읽어오게 됩니다.
좀 더 정확히 설명하자면 cin의 경우 형변환 시 '\n'이 문제가 되므로 아예 버퍼에서 안 가져옵니다. 따라서 cin.ignore();는 버퍼에 있는 맨 앞의 문자를 제거하는 함수로 getline()이 '\n'을 읽어오는 실수를 막아줍니다.