[C++] 한줄씩 입력받기

sunnny·2023년 7월 12일
0

BOJ

목록 보기
8/8
post-thumbnail

cin

  • 띄어쓰기와 개행을 구분하여 입력받기 어렵다.

getline()

1. istream의 getline()

cin.getline({변수 주소}, {최대 입력 가능 문자수}, {제한자});
cin.getline(char* str, streamsize n);
cin.getline(char* str, streamsize n, char dlim);
  • char배열로 입력이 들어오며, 마지막에 '\0'이 들어온다.
  • n-1개의 문자를 읽어온다.
  • dlim를 별도로 지정하지 않으면 '\n'으로 인식하고, dlim를 지정하면 해당 제한자 직전까지 읽어서 저장한다.

2. string의 getline()

getline({입력스트림 오브젝트 ex)cin}, {문자열을 저장할 string객체}, {제한자})
getline(isstream& is, string str);
getline(isstream& is, string str, char dlim);
  • 최대 문자수 제한이 없다.
  • dlim을 만날 때까지 모든 문자열을 받아와 string에 저장한다.
  • 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'을 읽어오는 실수를 막아준다.)

출처/참고

0개의 댓글