Namespaces
Variants

std::getline

출처: ko.cppreference.net
 
 
 
std::basic_string
 
헤더 <string>
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>& input,
             std::basic_string<CharT, Traits, Allocator>& str, CharT delim );
에 정의됨 (1)
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>&& input,
             std::basic_string<CharT, Traits, Allocator>& str, CharT delim );
(2) (C++11부터)
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>& input,
             std::basic_string<CharT, Traits, Allocator>& str );
(3)
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>&& input,
             std::basic_string<CharT, Traits, Allocator>& str );
(4) (C++11부터)

getline 입력 스트림에서 문자를 읽어 문자열에 넣습니다:

1,2) 서식 없는 입력 함수처럼 동작하지만, input.gcount()은(는) 영향을 받지 않습니다. 감시 객체를 생성하고 확인한 후 다음을 수행합니다:
1) str.erase().
를 호출합니다.2)input에서 문자를 추출하여 str에 추가하며, 다음 중 하나가 발생할 때까지 계속합니다 (나열된 순서대로 확인)
a) input에 파일 끝 조건 발생 시, getline은(는) eofbit를 설정합니다.
b) 다음 사용 가능한 입력 문자가 delim이고, Traits::eq(c, delim)에 의해 테스트된 경우, 구분 문자는 input에서 추출되지만 str에는 추가되지 않습니다.
c) str.max_size() 개의 문자가 저장된 경우, getline은(는) failbit를 설정하고 반환합니다.
3) 어떤 이유로든 문자를 전혀 추출하지 못한 경우 (버려진 구분 문자도 포함하지 않음), getline은(는) failbit를 설정하고 반환합니다.
3,4) getline(input, str, input.widen('\n'))과(와) 동일합니다. 즉, 기본 구분 문자는 개행 문자입니다.

매개변수

input - 데이터를 가져올 스트림
str - 데이터를 저장할 문자열
delim - 구분 문자

반환값

input

참고 사항

공백으로 구분된 입력을 사용할 때(예: int n ; std:: cin >> n ; ) 뒤따르는 모든 공백(개행 문자 포함)이 입력 스트림에 남게 됩니다. 그러다가 줄 단위 입력으로 전환할 때, getline 으로 가져온 첫 번째 줄은 바로 그 공백일 것입니다. 이러한 동작이 원하지 않는 경우일 가능성이 높으므로, 가능한 해결 방법으로는:

예제

다음 예제는 getline 함수를 사용하여 사용자 입력을 읽고, 스트림을 한 줄씩 처리하거나 delim 매개변수를 사용하여 줄의 일부를 처리하는 방법을 보여줍니다.

#include <iostream>
#include <sstream>
#include <string>
int main()
{
    // 사용자 인사
    std::string name;
    std::cout << "What is your name? ";
    std::getline(std::cin, name);
    std::cout << "Hello " << name << ", nice to meet you.\n";
    // 파일을 한 줄씩 읽기
    std::istringstream input;
    input.str("1\n2\n3\n4\n5\n6\n7\n");
    int sum = 0;
    for (std::string line; std::getline(input, line);)
        sum += std::stoi(line);
    std::cout << "\nThe sum is " << sum << ".\n\n";
    // 구분자를 사용하여 줄의 일부 읽기
    std::istringstream input2;
    input2.str("a;b;c;d");
    for (std::string line; std::getline(input2, line, ';');)
        std::cout << line << '\n';
}

가능한 출력:

What is your name? John Q. Public
Hello John Q. Public, nice to meet you.
The sum is 28.
a
b
c
d

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 91 C++98 getline 이 비형식화된 입력 함수로 동작하지 않음 비형식화된 입력 함수로 동작함

참고 항목

주어진 문자를 찾을 때까지 문자를 추출합니다
( std::basic_istream<CharT,Traits> 의 public member function)