Funkcje C ++ Istream

Funkcje C ++ Istream
Termin „strumień” w C ++ opisuje przepływ znaków między wątkiem programu a I/O. Klasy strumieniowe C ++ są potrzebne do wprowadzania i wysyłania akcji na urządzeniach i plikach IO. Klasy te są zaprojektowane do zarządzania wejściem i wyjściem programu i mają szczególną funkcjonalność.

Hierarchia klas strumieniowych

Klasa C ++ składa się z metod zarządzania i rządzenia zawartymi danymi.

zmiennoprzemienne, podwójne i klasy są typami danych podobnych do int int. Unikalna zmienna z klasą, ponieważ jej typ danych jest określany jako obiekt C ++. Wstępnie określone obiekty specjalne „CIN” i „Cout” mają różne klasy jako typy danych.

Dane zapisane w „Cout” lub odczytane z „CIN” są przykładami przepływów danych do lub poza programami w C++. Obecnie rozważamy następujące cztery klasy dla tego:

Istream
Każdy cel może być obsługiwany przez ten strumień wejściowy. Ilustracją Istream jest cin.

Ostream
Jest to strumień wyjściowy z kilkoma zastosowaniami. Ostreams są dostępne w formie 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, które jest mocno używane w programowaniu obiektowym, na przykład w C ++, gdzie niektóre klasy przyjmują cechy innych klas, które zostały już utworzone. Zajęcia przodków stają się specjalizacjami poprzez włączenie nowych funkcji.

Jeśli strumieniowa klasa
Ifstream można traktować w taki sam sposób jak Istream, który jest tym, czym jest.

Klasy strumieniowej
W ten sam sposób, w jaki funkcjonuje ifstreams, ale z wyjściem zamiast wejściu, Ofstream jest strumieniem plików wyjściowych. Ofstream jest używany w taki sam sposób, jak cout po skonstruowaniu, otwarciu i zweryfikowaniu nie ma żadnych błędów.

Klasa iOS
Z tej klasy wszystkie klasy strumieniowe zstąpiły. Strumienie wejściowe i wyjściowe to dwa różne typy.

Definiuje części strumienia niezależne od statusu wejścia lub wyjścia strumienia w bazie iOS.

W przeciwieństwie do członków omawianych w bazie iOS, członkowie zależne od parametrów szablonu są opisane w tej części.

Stream (wejście)
Ze względu na złożoność biblioteki iostream nie będziemy w stanie całkowicie go omawiać na tych lekcjach. Jednak podkreślimy funkcje, które są najbardziej używane. W tej sekcji przyjrzymy się klasie wejściowej z różnych kątów (ISTREAM).

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

Istream

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

Zajęcia członków

Istream :: Sentry
Klasa, która wykonuje wiele zadań i za każdym razem, gdy wykonywana jest procedura wejściowa. Jego destruktor nie jest zobowiązany do wykonywania jakichkolwiek działań. Jednak implementacje mogą wykonywać dodatkowe zadania uruchamiania lub czyszczenia w strumieniu udostępnionym przez wszystkie operacje wejściowe za pomocą tworzenia i zniszczenia obiektów Sentry.

Funkcje

Istream :: gCount
Podaje liczbę obiektów uzyskaną z najnowszej nieoformowanej akcji wejściowej obiektu. Niesformowane procedury wejściowe- otrzymuj, otrzymuj, ignoruj, zerknij, odczytaj, odczytaj trochę, odwracanie i unog- zmień wartość zwróconą przez tę funkcję. Należy jednak pamiętać, że wywoływanie zerki, powrót lub UNGET nie wydobywa żadnych postaci. W rezultacie liczba zawsze powraca 0.

Istream :: Get
Pojedyncza postać pobiera jedną postać ze strumienia. Postać jest ustawiona jako wartość argumentu lub zwrócona (pierwszy podpis) (drugi podpis).

C ciąg: Jeśli obecny jest znak rozgraniczenia, nie jest on usuwany z sekwencji wejściowej, a następnie utrzymywany jako następujący znak do pobrania ze strumienia, jeśli jest obecny.

Istream :: Getline
Usuwa znaki ze strumienia jako niezoformowane wejście i zapisuje je jako string C w zmiennej „S”, aż wyodrębniona znak stanie się znakiem wyznaczającym lub znamion „N”, do „S”. Dodatkowo metoda przestanie wyodrębniać znaki, jeśli osiągnie koniec pliku.

Wewnętrznie funkcja tworzy obiekt przed uzyskaniem dostępu do sekwencji wejściowej. Wreszcie, zabija obiekt przed powrotem, wyodrębniając znaki z powiązanego obiektu buforowego strumienia (zakładając, że wszystko jest w porządku) tak, jakby wykonywanie jednej z jego metod członkowskich, sbumpc lub sgetc.

Istream :: Ignoruj
Znaki są pobierane z sekwencji wejściowej i odrzucane pojedynczo, dopóki nie zostaną usunięte znaki „N”, albo jeden porównuje się do deniku. Dodatkowo, jeśli zostanie osiągnięty koniec pliku, funkcja zatrzymuje ekstrakcję znaków. Funkcja ustawia flagę „Eofbit”, jeśli osiągnie ten punkt zbyt wcześnie (przed wyodrębnieniem n znaków lub odkryciem dewelopera).

Przed uzyskaniem dostępu do sekwencji wejściowej funkcja konstruuje obiekt Sentry wewnętrznie (z Noskipws będzie prawdą). Wreszcie, zabija obiekt Sentry przed powrotem, wyodrębniając znaki z powiązanego obiektu buforowego strumienia (zakładając, że wszystko jest w porządku), tak jakby wykonywanie jednej z jego metod członkowskich: sbumpc lub sgetc.

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

Typ arytmetyczny

Znaki są pobierane ze strumienia i analizowane sekwencyjnie, aby przedstawić wartość właściwego typu, który jest następnie zapisywany jako wartość „Val”. Przed dostępem do sekwencji wejściowej funkcja konstruuje obiekt Sentry wewnętrznie (Noskipws będzie fałszywy). Jeśli wszystko się dobrze sprawdza, to działa Num Get :: Musz ukończenia procesy ekstrakcji i analizowania podczas modyfikujących wewnętrzne flagi stanu strumienia. Obiekt wartownika jest ostatecznie zniszczony, zanim odejdzie.

Funkcja wewnętrznie generuje obiekt Sentry przed odczytaniem sekwencji wejściowej, jest postrzegana jako wykonuje sformatowane wejście. Wreszcie, zabija obiekt Sentry przed powrotem, wyodrębniając znaki z powiązanego obiektu buforowego strumienia (zakładając, że wszystko jest w porządku), tak jakby wykonanie jednej z jego metod członkowskich, sbumpc lub sgetc.

Manipulatory

PF (*this) nazywa się, gdzie PF może być manipulatorem. Manipulatory są procedurami, które są tworzone, szczególnie do wywołania tego operatora. Ta procedura nie ma wpływu na sekwencję wejściową i nie są wyodrębnione żadne znaki.

ISTREAM :: powrót
Odrestaurowana postać próbuje przesunąć kursor w dół jednej postaci w strumieniu, aby ostatnia postać pobrana ze strumienia można było ponownie wyodrębnić przez operacje wejściowe.

Przed dostępem do sekwencji wejściowej funkcja konstruuje obiekt Sentry wewnętrznie. Następnie wywołuje SputbackC (C) na powiązanym obiekcie bufora strumienia (jeśli jest dobry). Obiekt wartownika jest ostatecznie zniszczony, zanim odejdzie.

Istream :: Przeczytaj
Przeczytaj blok danych:

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

W funkcji obiekt Sentry jest najpierw tworzony przed dostępem do sekwencji wejściowej. Wreszcie, zabija obiekt Sentry przed powrotem, wyodrębniając znaki z powiązanego obiektu buforowego strumienia (zakładając, że wszystko jest w porządku), tak jakby wykonywanie jednej z jego metod członkowskich: sbumpc lub sgetc.

Calling Count Count zwróci całkowitą liczbę znaków Ta funkcja poprawnie odczytała i przechowywana.

Istream :: Readsome
Ta funkcja zależy od wewnętrznych działań określonego obiektu bufora strumienia połączonego ze strumieniem, którego zachowanie jest w dużej mierze definiowane dla klas standardowych.

W funkcji obiekt Sentry jest najpierw tworzony przed dostępem do sekwencji wejściowej. Następnie (jeśli się powiedzie), wywołuje funkcję elementu w obiekcie bufora strumienia, aby ustalić, ile znaków jest teraz dostępnych przed wywołaniem „SBUMPC” w celu wydobycia do tej liczby znaków (lub sgetc). Obiekt wartownika jest ostatecznie zniszczony, zanim odejdzie.

Istream :: Seekg
Pozycja w linii wejściowej określa, gdzie następujący znak zostanie wyciągnięty ze strumienia wejściowego. Przed odczytaniem sekwencji wejściowej funkcja wewnętrznie konstruuje obiekt Sentry. Następnie (jeśli OK), wykonuje jedno z dwóch połączeń z odpowiednim obiektem bufora strumieniowego: pubseekpos (1) lub pubseekoff (2), (jeśli istnieje). Wreszcie, zataruje element Sentry i odjeżdża.

Istream :: Sync
Wyrównaj bufor wejściowy:

Wprowadza kontrolowaną sekwencję wejściową bufora strumienia do synchronizacji. Konkretna implementacja obiektu bufora strumienia podłączonego do strumienia określa specyfikację operacji.

Istream :: Tellg
Uzyskaj pozycję sekwencji wejściowej:

Daje pozycję obecnej postaci w strumieniu wejściowym. Następnie funkcja zwraca -1. Jeśli członek zawiedzie, zwraca prawdziwie.

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

Istream :: UNGET
Usuń znak:

Próbuje przesunąć kursor w dół jednej postaci w strumieniu, aby ostatnia postać pobrana ze strumienia można było ponownie wyodrębnić przez operacje wejściowe.

Nie członek

Operator >> (Istream)
Operator ekstrakcji (>>) zapewnia sformatowane dane wejściowe z tym działaniem po zastosowaniu do strumienia wejściowego.

Jedna postać: sekwencja znaków bierze z niej następną postać i przechowuje ją jako wartość „C”. Proces wydobywania znaków z IS i przechowywania ich w S, jako C-string, zatrzymuje się (jeśli szerokość nie jest zerowa), gdy napotyka się znak białej lub (szerokość () -1).

Ekstrakcja RValue: Włącza wyodrębnienie z obiektów RValue Istream, które ma taki sam wynik, jak wyodrębnienie z LVALUES: wywołuje to >> val.

Przykład 1

W takim przypadku zbadaliśmy, w jaki sposób możemy uzyskać dowolną wartość od użytkownika, a następnie wyświetlić ją w wyniku na ekranie.

#włączać
za pomocą przestrzeni nazw Std;
int main ()

int nr;
Cout<<"Please enter a number ";
cin >> nie;
Cout<<"The entered value is: " << no << "\n";

Uwzględnilibyśmy plik nagłówka. Następnie użyjemy przestrzeni nazw „STD” w standardowej przestrzeni nazw. Nazywamy funkcję main (). Zmienna o nazwie „nie” zostanie zadeklarowana w ramach tej metody. Typ danych „int” jest reprezentowany dla tej zmiennej. Termin „int” to skrót liczby całkowitej. Następnie używane jest instrukcja „cout”. To polecenie drukuje wiersz.

Użytkownik wprowadzi dowolną wartość losową po wyświetleniu tego tekstu na ekranie. Następnie wykorzystano by „CIN”. To polecenie wymaga, aby użytkownik wskazał wartość. Wpisany numer użytkownika zostałby zapisany w zmiennej. Wartość dostarczona przez użytkownika byłaby wyświetlana na ekranie za pomocą polecenia „Cout”.

Przykład 2

W tym przypadku zobaczylibyśmy, w jaki sposób otrzymamy dowolną nazwę od użytkownika, a następnie wyświetlimy ją na ekranie jako wynik.

#włączać
za pomocą przestrzeni nazw Std;
int main ()

Nazwa char [125];
Cout << "Enter your name" << endl;
CIN >> WS;
Cin.getline (nazwa, 125);
Cout << name << endl;
powrót 0;

Uwzględnilibyśmy plik nagłówka . Następnie wykorzystamy standardową przestrzeń nazw jako „std”. Wzywamy funkcję Main (). W ramach tej metody zadeklarujemy zmienną. Ta zmienna zawiera typ danych „char”. Następnie zastosowano oświadczenie „cout”. To polecenie pokazuje tekst „Wprowadź swoje imię” na ekranie. Po wyświetleniu tego tekstu na ekranie użytkownik wprowadziłby dowolną nazwę. Następnie wykorzystalibyśmy oświadczenie „CIN”.

To polecenie przyjmuje wartość od użytkownika. Podana nazwa byłaby przechowywana w zmiennej „WS”. Tutaj po raz kolejny użylibyśmy polecenia „CIN”. W ramach tego polecenia stosuje się funkcję getline (). Ta funkcja zawiera parametr, który zawiera nazwę wprowadzoną przez użytkownika i długość nazwy. Polecenie „cout” zostanie użyte do wyświetlania nazwy podanej przez użytkownika. Aby zakończyć kod, zostanie użyte polecenie „return 0”.

Wniosek

Najpierw rozmawialiśmy o tym, co jest funkcjami C ++ Istream. Następnie obserwujemy kilka funkcji i wymienionych ważnych definicji. W tym artykule uruchomiliśmy różne kody zawierające różne funkcje Istream. W pierwszym kodzie przyjmujemy dowolny numer od użytkownika i wyświetlamy ten numer na ekranie. W drugim użytkownik wprowadził nazwę i wydrukował tę nazwę na ekranie.