정수값이든, 문자 하나든, 문자열이든 그냥 cin >> s
으로 입력 받으면 되지만,
공백이 포함된 문장 전체는 cin 으로 받을 수가 없다.
공백이 포함된 문장 전체를 입력값으로 받을 땐 getline(cin, s)
를 사용해서 받으면 된다.
참고로 getline() 함수는 <string> 헤더에 포함되어 있다.
🚨 주의사항 첫 번째
cin
을 사용한 후에는cin.ignore()
함수를 사용해줘야 한다.cin 을 사용하면 값을 입력한 뒤 누른 엔터값('\n')이 버퍼에 남아 있다.
그래서 그냥 getline()을 사용하면 이 값이 그대로 들어가게 된다.-> 그래서
cin.ignore()
함수를 먼저 사용해 입력 버퍼에 남아 있는 모든 값을 지워준다.[ex]
string s1, s2; cin >> s1; cin.ignore(); getline(cin, s2);
🚨 주의사항 두 번째
getline()
함수는 while문 조건으로 사용할 수 없다cin 은 다음과 같이 while문의 조건으로 사용할 수 있다.
string s; while (cin >> s) { // 내부 코드 }
위와 같은 코드는 입력 개수를 모르는 상황에서 계속해서 입력을 받아야 할 때 사용할 수 있다.
반면 getline() 함수는 cin 처럼 while문의 조건을 사용할 수 없다.
만약 문장 전체를 값으로 받아야 하는데 입력 개수를 모르는 상황이라면, 다음과 같이 하면 된다.string s; while (true) { getline(cin, s); if (s == "") break; // 나머지 코드 }