Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ getline() 함수 완벽 가이드: 문자열 입력 처리 방법과 예제

C++ getline() 함수란?

C++의 getline() 함수는 스트림에서 문자를 비형식화(unformatted) 입력으로 추출하여, C 스타일 문자열(c-string)인 s에 저장하는 함수입니다. 추출 작업은 구분 문자(delimiter)를 만나거나, 종료 널 문자(null character)를 포함해 최대 n개의 문자가 s에 기록될 때까지 계속 진행됩니다.

공백을 포함한 한 줄 전체를 입력받을 수 있어, cin >> 연산자로는 처리하기 어려운 문장 단위 입력에 유용하게 활용됩니다.

함수 선언

basic_istream& getline (char_type* s, streamsize n);
basic_istream& getline (char_type* s, streamsize n, char_type delim);

매개변수 설명

  • s: 문자 배열을 가리키는 포인터로, 추출된 문자들이 C 스타일 문자열 형태로 저장됩니다.
  • n: 기록할 수 있는 최대 문자 수입니다. 종료 널 문자(\0)도 이 개수에 포함되므로, 실제 저장 가능한 문자는 n-1개입니다.
  • delim: 명시적으로 지정하는 구분 문자입니다. 다음에 추출할 문자가 이 구분 문자와 같으면(traits_type::eq로 비교) 문자 추출이 즉시 중단됩니다. 세 번째 인수를 생략하면 기본값으로 개행 문자('\n')가 사용됩니다.

반환값

이 함수는 basic_istream 객체(*this)를 반환합니다. 덕분에 여러 입력 함수 호출을 연속으로 연결(chaining)하여 사용할 수 있습니다.

사용 예제

#include <iostream>
using namespace std;

int main () {
    char name[256], title[256];
    cout << "이름을 입력하세요: ";
    cin.getline (name, 256);
    cout << "가장 좋아하는 영화를 입력하세요: ";
    cin.getline (title, 256);
    cout << name << "님이 가장 좋아하는 영화는 " << title << " 입니다";
}

실행 결과

이름을 입력하세요: Jack
가장 좋아하는 영화를 입력하세요: The Boss Baby
Jack님이 가장 좋아하는 영화는 The Boss Baby 입니다

위 예제에서 볼 수 있듯이, getline()은 공백을 포함한 문장 전체("The Boss Baby")를 하나의 문자열로 그대로 저장합니다. 일반적인 cin >> 연산자라면 첫 번째 공백에서 입력이 잘렸을 것입니다.

cin >> 와 함께 사용할 때 주의점

cin >> 연산자로 값을 입력받은 직후 getline()을 호출하면, 입력 버퍼에 남아 있는 개행 문자('\n')를 구분 문자로 인식해 빈 문자열이 즉시 반환되는 문제가 발생할 수 있습니다. 이 경우 cin.ignore()를 먼저 호출해 버퍼에 남은 개행 문자를 제거한 뒤 사용하는 것이 안전합니다.

std::string과 함께 사용하기

크기가 고정된 char 배열 대신 std::string을 사용하고 싶다면, <string> 헤더에 정의된 자유 함수 형태의 getline(istream, string)을 사용하면 됩니다. 이 방식은 배열 크기 제한 없이 임의 길이의 문자열을 안전하게 입력받을 수 있어 현대 C++에서 더 권장되는 방법입니다.