[C++] getline 함수

다곰·2022년 10월 1일
0

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 객체에 저장
  • default 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 으로 입력받도록 하면 해결 가능

profile
다교미의 불꽃 에러 정복기

0개의 댓글