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::sungetc

[metoda] Dekrementuje wskaźnik odczytu danych, a następnie zwraca znak, na który wskazuje ten wskaźnik.

Składnia

C/C++
#include <streambuf>

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

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
), wtedy funkcja dekrementuje następny wskaźnik (
gptr()
) i zwraca znak, na który wskazuje ten wskaźnik. Inaczej zostaje wywołana funkcja
pbackfail()
, aby przywrócić obszar pobierania do poprzedniego stanu. Funkcja
unget()
 jest zaimplementowana na podobnych warunkach, jak ta funkcja.

Przykład

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

int main()
{
    std::stringstream stream( "To jest tekst." );
    char first = static_cast < char >( stream.get() );
    char second = static_cast < char >( stream.rdbuf()->sungetc() );
    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()->sungetc();
    stream.rdbuf()->sungetc();
    int eof = stream.rdbuf()->sungetc();
    if( eof == EOF ) std::cout << "\nNiedozwolone odczytanie znaku przed 'T'!";
   
    return 0;
}
Standardowe wyjście programu:
Pierwszy: 'T'
Drugi: 'T'
Trzeci: 'T'
Czwarty: 'o'
Niedozwolone odczytanie znaku przed 'T'!

Zagadnienia powiązane

sputbackcUmieszcza znak na końcu obszaru odczytywania danych. (metoda)

Linki zewnętrzne