Namespaces
Variants

std::basic_streambuf<CharT,Traits>:: sputbackc

From cppreference.net
int_type sputbackc ( char_type c ) ;

문자 하나를 get 영역으로 되돌립니다.

만약 읽기 영역에 되돌리기 위치가 사용 가능하고( gptr ( ) > eback ( ) ), 문자 c gptr() 의 왼쪽 한 위치에 있는 문자와 동일하면( Traits :: eq ( c, gptr ( ) [ - 1 ] ) 로 판단), 다음 포인터( gptr() )를 간단히 감소시킵니다.

그렇지 않으면, get 영역을 되돌리거나 get 영역과 연관된 문자 시퀀스를 수정하기 위해 pbackfail ( Traits :: to_int_type ( c ) ) 를 호출합니다.

I/O 스트림 함수 basic_istream::putback 는 이 함수를 기반으로 구현됩니다.

목차

매개변수

c - 되돌릴 문자

반환값

되돌리기 위치가 사용 가능했던 경우, 다음 포인터가 현재 가리키고 있는 문자를 int_type 로 변환하여 반환합니다. 변환은 Traits :: to_int_type ( * gptr ( ) ) 를 통해 이루어집니다. 이 스트림 버퍼에서의 다음 단일 문자 입력은 이 문자를 반환할 것입니다.

되돌리기 위치를 사용할 수 없는 경우, pbackfail() 이 반환하는 값을 반환하며, 실패 시에는 Traits :: eof ( ) 입니다.

예제

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream s("abcdef"); // gptr()이 "abcdef"의 'a'를 가리킴
    std::cout << "Before putback, string holds " << s.str() << '\n';
    char c1 = s.get(); // c1 = 'a', gptr()이 이제 "abcdef"의 'b'를 가리킴
    char c2 = s.rdbuf()->sputbackc('z'); // s.putback('z')와 동일
                                         // gptr()이 이제 "zbcdef"의 'z'를 가리킴
    std::cout << "After putback, string holds " << s.str() << '\n';
    char c3 = s.get(); // c3 = 'z', gptr()이 이제 "zbcdef"의 'b'를 가리킴
    char c4 = s.get(); // c4 = 'b', gptr()이 이제 "zbcdef"의 'c'를 가리킴
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sputbackc('b');  // gptr()이 이제 "zbcdef"의 'b'를 가리킴
    s.rdbuf()->sputbackc('z');  // gptr()이 이제 "zbcdef"의 'z'를 가리킴
    int eof = s.rdbuf()->sputbackc('x');  // 되돌릴 문자가 없음: pbackfail() 실패
    if (eof == EOF)
        std::cout << "No room to putback after 'z'\n";
}

출력:

Before putback, string holds abcdef
After putback, string holds zbcdef
azzb
No room to putback after 'z'

참고 항목

입력 시퀀스의 다음 포인터를 하나 뒤로 이동
(public member function)
입력 스트림에 문자를 넣음
( std::basic_istream<CharT,Traits> 의 public member function)