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
#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
#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
sputbackc | Umieszcza znak na końcu obszaru odczytywania danych. (metoda) |
---|
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.