3. c++ 한줄 입력

han811·2021년 2월 7일
1

c++

목록 보기
3/14
post-thumbnail
  • c++에서 cin을 사용할 경우 띄어쓰기와 개행을 구분하기가 어렵습니다.

  • getline()이라는 함수를 사용하면 한 줄 입력이 편리해지는데 이때 istream에 속한 geline과 string에 속한 getline에는 차이가 존재합니다.

1) istream의 getline()
  • char 배열로 입력이 들어오며 마지막이 '\0'가 들어오게 됩니다.
  • streamsize에 해당하는 n에 따라 n-1개의 문자를 읽어옵니다.
  • dlim은 별도로 지정하지 않으면 '\n'으로 인식합니다.
  • dlim을 지정해주면 해당 제한자 직전까지 읽어서 저장합니다.

cin.getline(char str, streamsize n);
cin.getline(char
str, streamsize n, char dlim);

2) string의 getline()
  • 최대 문자수 제한이 없습니다.
  • dlim을 만날 때 까지 모든 문자열을 받아와 string에 저장합니다.

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'을 읽어오는 실수를 막아줍니다.

reference
profile
han811

0개의 댓글