Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: jankowalski25
Język C++

basic_streambuf::sputbackc

[metoda] Umieszcza znak na końcu obszaru odczytywania danych.

Składnia

C/C++
#include <streambuf>

namespace std
{
    template < class CharT, class Traits = std::char_traits < CharT > >
    class basic_streambuf
    {
    public:
        int_type sputbackc( char_type c );
    };
}

Argumenty

ArgumentOpis
cZnak do wstawienia.

Zwracana wartość

Jeśli pozycja dopisywania danych była dostępna, funkcja zwraca znak (rzutowany na typ
int_type
 przez wywołanie
Traits::to_int_type( * gptr() )
), na który wskazuje następny wskaźnik. Następna próba odczytu pojedynczego znaku zwróci właśnie taką wartość. W innym przypadku funkcja zwraca wartość otrzymaną od funkcji
pbackfail()
.

Dodatkowe informacje

Jeśli pozycja wskaźnika dopisywania danych jest dostępna w obszarze ich odczytywania (wywołanie
gptr() > eback()
 zwraca wartość
true
) oraz znak podany jako argument jest równy pierwszemu znakowi na lewo od znaku określanego przez funkcję
gptr()
 (występuje wywołanie
Traits::eq( c, gptr()[ - 1 ] )
), wtedy wystarczy wykonać dekrementację następnego wskaźnika (
gptr()
). Inaczej następuje wywołanie
pbackfail( Traits::to_int_type( c )
, aby przywrócić obszar pobierania do poprzedniego stanu lub zmienić zarówno ten obszar, jak również powiązaną sekwencję znaków. Funkcja
putback()
 jest zaimplementowana na podobnych warunkach, jak ta funkcja.

Przykład

C/C++
#include <iostream>
#include <sstream>

int main()
{
    std::stringstream stream( "to jest tekst." );
    std::cout << "Przed: \"" << stream.str() << "\"\n";
    char first = static_cast < char >( stream.get() );
    char second = static_cast < char >( stream.rdbuf()->sputbackc( 'T' ) );
    std::cout << "Po: \"" << stream.str() << "\"\n";
    char third = static_cast < char >( stream.get() );
    char fourth = static_cast < char >( stream.get() );
    std::cout << "Pierwszy: \'" << first << "\'\n"
    << "Drugi: \'" << second << "\'\n"
    << "Trzeci: \'" << third << "\'\n"
    << "Czwarty: \'" << fourth << '\'';
    stream.rdbuf()->sputbackc( 'o' );
    stream.rdbuf()->sputbackc( 't' );
    int eof = stream.rdbuf()->sputbackc( 'O' );
    if( eof == EOF ) std::cout << "\nNiedozwolone wstawienie znaku 'O' przed 't'!";
   
    std::cout << "\nOstatecznie: \"" << stream.str() << '\"';
    return 0;
}
Standardowe wyjście programu:
Przed: "to jest tekst."
Po: "To jest tekst."
Pierwszy: 't'
Drugi: 'T'
Trzeci: 'T'
Czwarty: 'o'
Niedozwolone wstawienie znaku 'O' przed 't'!
Ostatecznie: "to jest tekst."

Linki zewnętrzne