istream
라이브러리의cin.getline()
cin.getline(char* str, streamsize n);
cin.getline(char* str, streamsize n, char dlim);
cin.getline(변수 주소, 최대 입력 가능 문자수, 종결 문자);
‘\0’
인 c-string
을 입력 받는데 사용n-1
개의 문자 개수만큼 읽어와 str
에 저장 ➡️ n번째 문자는 NULL
(‘\0’
)로 바꿈delim
은 별도로 지정해주지 않으면 엔터(‘\n’
)로 인식delim
지정해주면 delim
직전까지 읽어서 str
에 저장
string
라이브러리의getline()
getline(istream& is, string str);
getline(istream& is, string str, char dlim);
getline(입력스트림 오브젝트, 문자열을 저장할 string 객체, 종결 문자);
ex) getline(cin, str);
delim
만날 때 까지 모든 문자열을 입력 받아 하나의 string
객체에 저장delim
➡️ '\n'
❗️ 입력 받을 때 띄어쓰기에 따라 구분되지 않고 엔터에 따라 구분해 입력받기 위해 주로 사용
❗️ 주의
int n;
string str;
cin >> n;
getline(cin, str);
n
을 입력 받은 후 문자열을 입력받지 않고 바로 다음 코드로 넘어감
➡️ n
을 입력한 뒤 누른 엔터(‘\n’
)가 그대로 남아있어 getline()
에 들어가기 때문
✏️ 해결방법: cin.ignore()
함수 사용
int n;
string str;
cin >> n;
cin.ignore();
getline(cin, str);
cin.ingore()
가 입력 버퍼의 모든 내용을 제거해주어 getline()
이 정상적으로 동작 가능
➡️ 아니면 그냥 모든 값을 getline
으로 입력받도록 하면 해결 가능