Funkcje istream C++

Funkcje Istream C

Termin „strumień” w C++ opisuje przepływ znaków między wątkiem programu a we/wy. Klasy strumieni C++ są potrzebne do wprowadzania i wyprowadzania działań na urządzeniach IO i plikach. Klasy te są przeznaczone do zarządzania wejściami i wyjściami programu i mają określoną funkcjonalność.

Hierarchia klas strumienia

Klasa C++ składa się z metod wymaganych do zarządzania danymi, które zawiera.

float, double i class to typy danych podobne do int. Unikalna zmienna z klasą jako typem danych jest określana jako obiekt C++. Określone z góry obiekty specjalne „cin” i „cout” mają różne klasy jako typy danych.







Dane zapisywane do „cout” lub odczytywane z „cin” są przykładami przepływów danych do lub z programów w C++. Obecnie rozważamy następujące cztery klasy dla tego jednego:



Przesyłaj strumieniowo
Ten strumień wejściowy może służyć dowolnemu celowi. Przykładem istream jest cin.



Ostream
Jest to strumień wyjściowy o kilku zastosowaniach. Ostreamy występują w postaci cout i cin.





Jeśli strumień
Jest to strumień plików wejściowych.

Strumienia
Jest to strumień plików wyjściowych. Dziedziczenie jest pojęciem często używanym w programowaniu obiektowym, takim jak C++, gdzie niektóre klasy przyjmują cechy innych klas, które już zostały utworzone. Klasy przodków stają się następnie specjalizacjami same w sobie poprzez włączenie nowych cech.



Jeśli klasa strumieniowa
Ifstream może być traktowany w taki sam sposób jak istream, i tak właśnie jest.

Z klasy stream
W ten sam sposób, w jaki działa ifstreams, ale z danymi wyjściowymi zamiast wejściowymi, ofstream jest strumieniem plików wyjściowych. Ofstream jest używany w taki sam sposób jak cout po skonstruowaniu, otwarciu i zweryfikowaniu, aby nie zawierał błędów.

Klasa Ios
Z tej klasy powstały wszystkie klasy strumieniowe. Strumienie wejściowe i wyjściowe to dwa różne typy.

Definiuje części strumienia, które są niezależne od stanu wejścia lub wyjścia strumienia w bazie ios.

W przeciwieństwie do elementów omówionych w bazie ios, w tej części opisano elementy zależne od parametrów szablonu.

Strumień (wejście)
Ze względu na złożoność biblioteki iostream nie będziemy w stanie omówić jej w całości na tych lekcjach. Podkreślimy jednak funkcje, które są najczęściej używane. W tej sekcji przyjrzymy się klasie wejściowej pod różnymi kątami (istream).

Dowiedzieliśmy się, że operator ekstrakcji (>>) zostanie wykorzystany do pozyskania danych ze strumienia wejściowego.

STRUMIEŃ

W języku programowania C++ strumień wejściowy jest obsługiwany przez klasę istream. Dane wejściowe są odczytywane i rozumiane jako seria znaków przy użyciu tych obiektów strumienia wejściowego. Wejście jest obsługiwane przez cin.

Klasy członków

istream::wartownik
Klasa, która wykonuje wiele zadań i za każdym razem wykonywana jest procedura wejściowa. Jego destruktor nie jest wymagany do wykonywania jakichkolwiek działań. Jednak implementacje mogą wykonywać dodatkowe zadania uruchamiania lub czyszczenia w strumieniu współdzielonym przez wszystkie operacje wejściowe przy użyciu tworzenia i niszczenia obiektów wartowniczych.

Funkcje

istream::gcount
Podaje liczbę znaków uzyskaną z ostatniej niesformatowanej akcji wejściowej obiektu. Niesformatowane procedury wejściowe — get, getline, ignore, peek, read, read some, putback i unget — zmieniają wartość zwracaną przez tę funkcję. Pamiętaj jednak, że wywoływanie peeks, putback lub unget nie wyodrębnia żadnych znaków. W rezultacie licznik zawsze zwróci 0.

istream::get
Pojedynczy znak usuwa jeden znak ze strumienia. Znak jest albo ustawiany jako wartość argumentu, albo zwracany (pierwszy podpis) (drugi podpis).

Ciąg C: Jeśli znak ograniczający jest obecny, nie jest usuwany z sekwencji wejściowej, a zamiast tego jest przechowywany jako następujący znak do pobrania ze strumienia, jeśli jest obecny.

istream::getline
Usuwa znaki ze strumienia jako niesformatowane dane wejściowe i zapisuje je jako ciąg c w zmiennej „s”, aż wyodrębniony znak stanie się znakiem ograniczającym lub znaki „n” zostaną zapisane w „s”. Dodatkowo metoda zatrzyma wyodrębnianie znaków, jeśli dojdzie do końca pliku.

Wewnętrznie funkcja tworzy obiekt przed uzyskaniem dostępu do sekwencji wejściowej. Na koniec zabija obiekt przed powrotem, wyodrębniając znaki ze skojarzonego z nim obiektu bufora strumienia (zakładając, że wszystko jest w porządku), tak jakby wykonywał jedną z jego metod członkowskich, sbumpc lub sgetc.

istream::ignoruj
Znaki są pobierane z sekwencji wejściowej i odrzucane pojedynczo, aż do usunięcia „n” znaków lub porównania równego limitowi. Dodatkowo po osiągnięciu końca pliku funkcja zatrzymuje wyodrębnianie znaków. Funkcja ustawia flagę „eofbit”, jeśli dojdzie do tego punktu zbyt wcześnie (przed wyodrębnieniem n znaków lub wykryciem delim).

Przed uzyskaniem dostępu do sekwencji wejściowej funkcja konstruuje wewnętrznie obiekt sentry (z noskipws będzie to prawda). Na koniec zabija obiekt sentry przed powrotem, wyodrębniając znaki z powiązanego z nim obiektu bufora strumienia (zakładając, że wszystko jest w porządku), tak jakby wykonywał jedną z jego metod członkowskich: sbumpc lub sgetc.

istream::operator>>
Operator ekstrakcji (>>) stosuje ten operator do strumienia wejściowego. Jako funkcja ma zbyt wielu członków.

Typ arytmetyczny

Znaki są usuwane ze strumienia i analizowane sekwencyjnie, aby reprezentować wartość odpowiedniego typu, która jest następnie zapisywana jako wartość „val”. Przed uzyskaniem dostępu do sekwencji wejściowej funkcja konstruuje wewnętrznie obiekt sentry (noskipws będzie miał wartość false). Jeśli wszystko się sprawdzi, uruchamia polecenie num get::get, aby zakończyć procesy wyodrębniania i analizowania, jednocześnie modyfikując wewnętrzne flagi stanu strumienia. Obiekt wartownika zostaje ostatecznie zniszczony, zanim odejdzie.

Funkcja wewnętrznie generuje obiekt wartownika przed odczytaniem sekwencji wejściowej, jest ona postrzegana jako wykonująca sformatowane dane wejściowe. Na koniec zabija obiekt sentry przed powrotem, wyodrębniając znaki ze skojarzonego z nim obiektu bufora strumienia (zakładając, że wszystko jest w porządku), tak jakby wykonywał jedną z jego metod członkowskich, sbumpc lub sgetc.

Manipulatory

Wywoływana jest funkcja pf (*this), gdzie pf może być manipulatorem. Manipulatory to procedury stworzone specjalnie do wywoływania, gdy ten operator jest wywoływany. Ta procedura nie ma wpływu na sekwencję wejściową i żadne znaki nie są wyodrębniane.

istream::putback
Odtworzony znak próbuje przesunąć kursor w dół o jeden znak w strumieniu, aby ostatni znak pobrany ze strumienia mógł zostać ponownie wyodrębniony przez operacje wejściowe.

Przed uzyskaniem dostępu do sekwencji wejściowej funkcja konstruuje wewnętrznie obiekt sentry. Następnie wywołuje sputbackc(c) na skojarzonym obiekcie bufora strumienia (jeśli jest dobry). Obiekt wartownika zostaje ostatecznie zniszczony, zanim odejdzie.

istream::czytaj
Przeczytaj blok danych:

Znaki „n” są pobierane ze strumienia, a następnie przechowywane w tablicy, na którą wskazuje „s”. Ta funkcja jedynie replikuje blok danych bez sprawdzania zawartości danych lub dodawania znaku zerowego na końcu.

W ramach tej funkcji obiekt wartownika jest tworzony przed uzyskaniem dostępu do sekwencji wejściowej. Na koniec zabija obiekt sentry przed powrotem, wyodrębniając znaki z powiązanego z nim obiektu bufora strumienia (zakładając, że wszystko jest w porządku), tak jakby wykonywał jedną z jego metod członkowskich: sbumpc lub sgetc.

Licznik wywołujący zwróci całkowitą liczbę znaków, które ta funkcja poprawnie odczytała i zachowała.

istream::przeczytaj
Ta funkcja jest zależna od wewnętrznego działania konkretnego obiektu bufora strumienia połączonego ze strumieniem, którego zachowanie jest w dużej mierze zdefiniowane przez implementację dla klas standardowych.

W ramach tej funkcji obiekt wartownika jest tworzony przed uzyskaniem dostępu do sekwencji wejściowej. Następnie (jeśli się powiedzie), wywołuje funkcję składową w obiekcie bufora strumienia, aby określić, ile znaków jest teraz dostępnych przed wywołaniem „sbumpc”, aby wyodrębnić do tej liczby znaków (lub sgetc). Obiekt wartownika zostaje ostatecznie zniszczony, zanim odejdzie.

istream::seekg
Pozycja w wierszu wejściowym określa, gdzie ze strumienia wejściowego zostanie pobrany następujący znak. Przed odczytaniem sekwencji wejściowej funkcja wewnętrznie konstruuje obiekt wartownika. Następnie (jeśli OK), wykonuje jedno z dwóch wywołań do odpowiedniego obiektu bufora strumienia: pubseekpos (1) lub pubseekoff (2), (jeśli jest). W końcu niszczy przedmiot wartownika i odlatuje.

istream::synchronizacja
Wyrównaj bufor wejściowy:

Synchronizuje kontrolowaną sekwencję wejściową połączonego bufora strumieniowego. Specyficzna implementacja obiektu bufora strumienia połączonego ze strumieniem określa specyfikę operacji.

istream::telg
Uzyskaj pozycję sekwencji wejściowej:

Podaje aktualną pozycję znaku w strumieniu wejściowym. Następnie funkcja zwraca -1. Jeśli element członkowski nie powiedzie się, zwraca true.

Zwraca rdbuf()->pubseekoff jeśli nie (0,cur,in). Obiekt wartownika zostaje ostatecznie zniszczony, zanim odejdzie.

istream::unget
Usuń znak:

Próbuje przesunąć kursor w dół o jeden znak w strumieniu, aby ostatni znak pobrany ze strumienia mógł zostać ponownie wyodrębniony przez operacje wejściowe.

Niebędący członkiem

operator>> (istream)
Operator ekstrakcji (>>) zapewnia sformatowane dane wejściowe z tą akcją po zastosowaniu do strumienia wejściowego.

Jeden znak: sekwencja znaków pobiera z niej następny znak i przechowuje go jako wartość „c”. Proces wyodrębniania znaków z is i przechowywania ich w s, jako c-string, zatrzymuje się (jeśli szerokość nie jest równa zero) po napotkaniu znaku odstępu lub wyodrębnieniu znaków (szerokość ()-1)).

Ekstrakcja rwartości: umożliwia wyodrębnianie z rwartości obiektów istream, co daje taki sam rezultat jak wyodrębnianie z lwartości: Wywołuje is>>Val.

Przykład 1

W tym przypadku zbadamy, w jaki sposób możemy uzyskać dowolną wartość od użytkownika, a następnie wyświetlić ją jako wynik na ekranie.

#include
za pomocą przestrzeń nazw standardowe ;
int Główny ( )
{
int Nie ;
Cout << 'Proszę wpisać numer ' ;
jedzenie >> Nie ;
Cout << 'Wprowadzona wartość to: ' << Nie << ' \n ' ;
}

Dołączylibyśmy plik nagłówkowy . Następnie użyjemy przestrzeni nazw „std” w standardowej przestrzeni nazw. Wywołalibyśmy funkcję main(). W ramach tej metody zostanie zadeklarowana zmienna o nazwie „no”. Dla tej zmiennej reprezentowany jest typ danych „int”. Termin „int” to skrót liczby całkowitej. Następnie używane jest stwierdzenie „cout”. To polecenie drukuje wiersz.

Użytkownik wprowadzi dowolną losową wartość po wyświetleniu tego tekstu na ekranie. Wtedy użyto by wyrażenia „cin”. To polecenie wymaga od użytkownika wskazania wartości. Wprowadzony numer użytkownika zostanie zapisany w zmiennej. Wartość podana przez użytkownika byłaby wyświetlana na ekranie za pomocą polecenia „cout”.

Przykład 2

W tym przypadku zobaczylibyśmy, jak otrzymujemy dowolną nazwę od użytkownika, a następnie pokazujemy ją na ekranie jako wynik.

#include
za pomocą przestrzeń nazw standardowe ;

int Główny ( )

{

zwęglać Nazwa [ 125 ] ;
Cout << 'Wpisz swoje imię' << koniec ;


jedzenie >> ws ;

jedzenie . getline ( Nazwa, 125 ) ;

Cout << Nazwa << koniec ;

zwrócić 0 ;

}

Dołączylibyśmy plik nagłówkowy . Następnie użyjemy standardowej przestrzeni nazw jako „std”. Wywołalibyśmy funkcję main(). W ramach tej metody zadeklarujemy zmienną. Ta zmienna przechowuje typ danych „char”. Następnie stosuje się oświadczenie „cout”. To polecenie wyświetla tekst „Wprowadź swoje imię” na ekranie. Po wyświetleniu tego tekstu na ekranie, użytkownik wprowadzałby dowolną nazwę. Następnie użyjemy wyrażenia „cin”.

To polecenie pobiera wartość od użytkownika. Podana nazwa byłaby przechowywana w zmiennej „ws”. Tutaj po raz kolejny użyjemy polecenia „cin”. W ramach tego polecenia stosowana jest funkcja getline(). Funkcja ta zawiera parametr zawierający nazwę wprowadzoną przez użytkownika oraz długość nazwy. Polecenie „cout” zostanie użyte do wyświetlenia nazwy podanej przez użytkownika. Do zakończenia kodu zostanie użyte polecenie „powrót 0”.

Wniosek

Najpierw omówiliśmy, czym są funkcje istream C++. Następnie obserwujemy kilka wymienionych funkcji i ważnych definicji. W tym artykule uruchomiliśmy różne kody, które zawierają różne funkcje istream. W pierwszym kodzie pobieramy od użytkownika dowolny numer i wyświetlamy go na ekranie. W drugim użytkownik wpisał nazwisko i wydrukował je na ekranie.