Język C++
basic_istream::peek
[metoda] Odczytuje następny znak bez pobierania go.Składnia
#include <iostream>
namespace std
{
template < class Elem, class Tr >
class basic_istream
{
public:
int_type peek();
};
}
Zwracana wartość
Następny znak w sekwencji wejścia. Jeśli nie ma więcej znaków do odczytania lub wewnętrzna flaga stanu jest ustawiona, funkcja zwraca wartość oznaczającą koniec pliku (EOF) i ustawia wewnętrzną flagę stanu wykorzystując poniższe wartości:
Opis szczegółowy
Funkcja konstruuje i sprawdza poprawność obiektu sentry, a następnie odczytuje następny znak ze strumienia wejściowego bez pobierania go. Jeśli wewnętrzna flaga stanu jest ustawiona przed lub w trakcie wywołania funkcji, zwracaną wartością jest koniec pliku (EOF). Funkcja uzyskuje dostęp do sekwencji wejściowej poprzez stworzenie obiektu sentry (z
noskipws ustawionym na wartość
true
). Następnie próbuje odczytać jeden znak z bufora strumienia przez wywołanie funkcji składowej
sgetc()
, a na końcu niszczy obiekt sentry przed zwróceniem wartości. Wywołanie tej funkcji ustawia wartość zwracaną przez funkcję
gcount na zero.
Dodatkowe informacje
Niesformatowana funkcja wejścia próbuje uzyskać dostęp do składowej przez zwrócenie
rdbuf()->sgetc()
. W razie niepowodzenia zwraca
std::traits_type::eof.
Wyrzucane wyjątki
Jeśli maska wyjątków nie zawiera wartości
std::ifstream::goodbit, to funkcja może wyrzucić wyjątek
std::ios_base::failure, gdy flaga stanu błędu zawiera wartość inną, niż
goodbit.
Przykład
#include <iostream>
#include <string>
int main()
{
std::cout << "Wprowadz liczbe lub slowo: ";
char c = std::cin.peek();
if(( c >= '0' ) &&( c <= '9' ) )
{
int n;
std::cin >> n;
std::cout << "Wprowadziles liczbe: " << n << '\n';
}
else
{
std::string str;
std::getline( std::cin, str );
std::cout << "Wprowadziles slowo: " << str << '\n';
}
return 0;
}
Wyjście:
Wprowadz liczbe lub slowo: foobar
Wprowadziles slowo: foobar
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.