cin과 getline() 혼용시 주의할 점

Chan_hee·2024년 11월 11일

C++

목록 보기
3/3

이슈사항

문제링크

위 문제를 해결하면서 cin과 getline()함수를 혼용으로 사용하게 되었습니다. 이 때 예상하는대로 결과가 나오지않아서 문제 푸는데 애를 먹었습니다..

cin vs getline()

  1. cin

    • cin은 기본적으로 공백(스페이스, 탭, 엔터 등)을 구분자로 사용하여 입력을 받습니다.
    • 입력을 받을 때 공백이 포함된 문자열을 입력하면 공백을 기준으로 입력을 나누어 처리합니다.
    • 공백을 만나면 공백전까지의 값을 저장하고 입력버퍼에 공백값을 남겨놓습니다.
  2. getline()

    • 기본적으로 공백을 포함하여 개행 문자를 만날때까지 한줄 전체를 입력받습니다.
    • 개행문자를 만나면 개행문자 전까지의 값 전체를 저장하고 개행문자는 버퍼에서 제거합니다.
      위를 통해 입력 버퍼에 개행 혹은 공백값을 남겨놓는 유무가 가장 큰차이점임을 알 수 있습니다.

예제

int t;
cin >> t;
string s;
getline(cin, s);

위와 같이 코드를 작성한다면 원하는 결과가 나오지 않습니다. 그 이유는 t의 값을 cin을 통해 입력받게 되면 입력 버퍼에 개행문제 '\n'이 남아있게 됩니다. 따라서 다음 getline()으로 한줄 전체를 입력받고자 할때 입력버퍼에 이미 개행문자가 있으므로 그냥 빈문자열을 s에 저장하게되고 종료되어버립니다.

int t;
cin >> t;
cin.ignore()
string s;
getline(cin, s);

이 코드 처럼 cin과 getline을 혼용하게 된다면 cin으로 값을 입력받은 이후에 ignore()를 활용하여 버퍼의 값들을 비워주는 과정으로 원하는 결과를 얻게 될 수 있습니다.

0개의 댓글