Namespaces
Variants

std:: getline

From 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) UnformattedInputFunction 처럼 동작하지만, input. gcount ( ) 는 영향을 받지 않습니다. sentry 객체를 생성하고 검사한 후 다음을 수행합니다:
1) str. erase ( ) 를 호출합니다.
2) input 에서 문자들을 추출하여 str 에 추가하며, 다음 조건 중 하나가 발생할 때까지 계속됩니다 (아래 순서대로 확인)
a) input 에서 파일 끝(end-of-file) 조건이 발생한 경우, 이때 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)