C++ Podstawowe wejście/wyjście: przykład Cout, Cin, Cerr
W czym są strumienie C++?
C++ zapewnia użytkownikom szereg bibliotek, których mogą używać do wykonywania zadań wejścia/wyjścia. Zadania te realizowane są w formie sekwencji bajtów, popularnie zwanych strumieniami.
Strumienie dzielą się na dwa:
Rodzaje strumieni
- Strumień wejściowy: Jest to rodzaj strumienia, w którym bajty przepływają z urządzenia takiego jak klawiatura do pamięci głównej.
- Strumień wyjściowy: Jest to rodzaj strumienia, w którym bajty przepływają w przeciwnym kierunku, to znaczy z pamięci głównej, a następnie do urządzenia takiego jak ekran wyświetlacza.
Jak działają strumienie?
C++ strumienie działają w następujący sposób:
- Najpierw inicjowany jest strumień odpowiedniego typu.
- Następnie powinieneś określić, gdzie I / O nastąpi przy użyciu wskaźników get/put.
- Po dotarciu do właściwego miejsca w strumieniu możesz wykonywać zadania wejściowe i wyjściowe, odpowiednio za pomocą operatorów >> i <<.
Tabela funkcji
Poniżej przedstawiono funkcje zawarte w pliku nagłówkowym stream.h:
Klasa | Funkcje |
---|---|
Plikbuf | Ustawia bufory plików do odczytu/zapisu. Posiada funkcje close() i open() |
baza fstream | Jest to klasa bazowa dla klas ifstream, fstream i ofstream. Jej operacje są wspólne dla strumieni plików. |
jeśli strumień | Jest to klasa strumienia pliku wejściowego zapewniająca operacje wejściowe. |
poza strumieniem | Jest to klasa strumienia pliku wyjściowego umożliwiająca wykonywanie operacji wyjściowych. |
fstream | To klasa strumienia wejścia/wyjścia. Obsługuje jednoczesne operacje wejścia/wyjścia. |
C++ Pliki nagłówkowe dla wejścia/wyjścia
C++ udostępnia trzy biblioteki zawierające funkcje umożliwiające wykonywanie podstawowych zadań wejścia/wyjścia. Należą do nich:
- Iostream: To skrót od standardowego strumienia wejścia/wyjścia. Ten plik nagłówkowy zawiera definicje obiektów takich jak cin/cout/cerr.
- Jomanip: To skrót od manipulatorów wejścia/wyjścia. Biblioteka zawiera funkcje, które można wykorzystać do manipulacji strumieniami. Zawiera definicje obiektów takich jak setw, setprecision i inne.
- Fstream: Jest to plik nagłówkowy opisujący strumień pliku. Obsługuje dane odczytywane z pliku jako dane wejściowe lub zapisywane do pliku jako dane wyjściowe.
Słowa kluczowe cin i cout są bardzo popularne w C++. Służą one odpowiednio do pobierania danych wejściowych i drukowania. Aby z nich skorzystać, musisz dołączyć plik nagłówkowy iostream do swojego programu. Powodem jest to, że są one zdefiniowane w tym pliku nagłówkowym. Niedołączenie pliku nagłówkowego iostream spowoduje wygenerowanie błędu. Jest to spowodowane porażką ze strony C++ kompilator, aby zrozumieć znaczenie słów kluczowych.
Główne obiekty zdefiniowane w pliku nagłówkowym iostream to cin, cout, cerr i clog. Omówmy je.
std::out
Obiekt cout jest instancją klasy iostream. Służy do generowania danych wyjściowych na standardowym urządzeniu wyjściowym, którym zwykle jest ekran. Jest używany razem z operatorem wstawiania strumienia (<<).
Przykład
#include <iostream> using namespace std; int main() { char welcome[] = "Welcome to Guru99"; cout << welcome << endl; return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream, w którym zdefiniowany jest obiekt cout.
- Dołącz przestrzeń nazw std, abyśmy nie musieli jej wywoływać podczas korzystania z jej klas.
- Wywołaj funkcję main(). Kod programu należy dodać w jego treści. Otwierający nawias klamrowy { oznacza początek treści.
- Utwórz zmienną znakową o nazwie Welcome, która będzie przechowywać ciąg Witamy w Guru99.
- Wydrukuj wartość ciągu powitalnego na konsoli. Koniec jest a C++ słowo kluczowe oznaczające linię końcową. Przesuwa kursor, aby rozpocząć drukowanie tekstu w następnej linii.
- Program musi zwrócić wartość po pomyślnym wykonaniu.
- Koniec treści funkcji main().
std::cin
Obiekt cin jest instancją klasy istream. Odczytuje dane wejściowe z urządzenia wejściowego, klawiatury. Zwykle jest używany razem z operatorem ekstrakcji (>>). Obiekt ekstrakcji jest odpowiedzialny za ekstrakcję danych wprowadzonych za pomocą klawiatury z obiektu cin.
Przykład
Poniższy przykład pokazuje, jak używać słowa kluczowego cin w C++:
#include <iostream> using namespace std; int main() { int number; cout << "Enter a number:"; cin >> number; cout << "\nYou entered: " << number; return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego programu. Obiekt cin jest zdefiniowany w tym pliku nagłówkowym.
- Dołącz przestrzeń nazw std, aby użyć jej klas. Nie będziesz musiał wywoływać std podczas korzystania z jego klas.
- Wywołaj funkcję main(). Kod programu należy dodać w jego treści.
- Początek treści programu.
- Zadeklaruj zmienna całkowita nazwany numer.
- Wydrukuj na ekranie komunikat proszący użytkownika o wprowadzenie numeru.
- Odczytaj z klawiatury wartość wprowadzoną przez użytkownika na konsoli.
- Wydrukuj wartość przeczytaną powyżej na konsoli wraz z innym tekstem.
- Program powinien zwrócić wartość, jeśli zostanie pomyślnie wykonany.
- Koniec ciała funkcji głównej.
std::cerr
Obiekt cerr tworzy standardowy strumień błędów do wysyłania błędów C++. Cerr jest instancją klasy ostream. Obiekt cerr jest niebuforowany. Oznacza to, że jest używany, gdy komunikat o błędzie ma zostać wyświetlony natychmiast.
Ponieważ nie jest buforowany, nie przechowuje komunikatu o błędzie do późniejszego wyświetlenia. Jest używany razem z operatorem wstawiania strumienia (<<).
Przykład
#include <iostream> using namespace std; int main() { cerr << "An Error occurred!"; return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream, w którym zdefiniowano obiekt cerr.
- Dołącz przestrzeń nazw std, abyśmy nie musieli jej wywoływać podczas korzystania z jej klas.
- Wywołaj funkcję main(). Logikę programu należy dodać w jego treści. Otwierający nawias klamrowy wyznacza początek treści funkcji.
- Użyj obiektu cerr, aby wydrukować błąd na konsoli.
- Program musi zwrócić wartość po pomyślnym wykonaniu.
- Koniec ciała funkcji głównej.
std::zatkać
Obiekt clog jest instancją klasy ostream. Służy do wyświetlania błędów na standardowym wyświetlaczu, monitorze. Jest podobny do obiektu cerr, ale jest buforowany. Ponieważ jest buforowany, przechowuje komunikat o błędzie w buforze, dopóki bufor nie zostanie wypełniony/opróżniony. Jest używany razem z operatorem wstawiania strumienia (<<).
Przykład
#include <iostream> using namespace std; int main() { clog << "An Error occurred!"; return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Łącznie z plikiem nagłówkowym iostream, w którym zdefiniowany jest obiekt zatykający.
- Dołączamy przestrzeń nazw std, abyśmy mogli używać jej klas bez wywoływania jej.
- Wywołanie funkcji main(). Logikę programu należy dodać w jego treści. { oznacza początek treści funkcji.
- Użyj obiektu clog, aby wydrukować błąd na standardowym wyjściu, monitorze.
- Program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main().
Obsługa błędów w strumieniach IO
Aby sprawdzić, czy strumień jest prawidłowy, czy nie, możesz użyć go jako wartości logicznej.
Oto przykład:
ifstream file( "myfile.txt" ); if ( ! file ) { cout << "File NOT opened!" << endl; }
Aby uzyskać więcej szczegółów na temat statusu strumienia, możesz użyć następujących funkcji:
- good() - zwróci wartość true, jeśli wszystko jest w porządku.
- bad() - zwróci wartość true, jeśli wystąpi błąd krytyczny.
- fail() — zwróci wartość true w przypadku nieudanej operacji strumieniowej.
- eof() - zwróci wartość true, jeśli dotrze do końca pliku.
Aby dowiedzieć się, czy konkretna operacja odczytu/zapisu nie powiodła się, należy sprawdzić wynik odczytu.
Na przykład, aby sprawdzić, czy użytkownik wprowadził prawidłową liczbę całkowitą, wykonaj następujące czynności:
int p; if ( cin >> p ) { cout << "Enter valid number" << endl; }
Podsumowanie
- Zadania wejściowe i wyjściowe W C++ odbywa się poprzez sekwencję bajtów. Bajty nazywane są strumieniami.
- W strumieniu wejściowym bajty przepływają z urządzenia wejściowego, takiego jak klawiatura, do pamięci głównej.
- W strumieniu wyjściowym bajty z pamięci głównej są następnie przesyłane do urządzenia wyjściowego, takiego jak monitor.
- Obiekt cin jest instancją klasy istream. Odczytuje dane wejściowe z urządzenia wejściowego, takiego jak klawiatura.
- Obiekt cout jest instancją klasy ostream. Generuje dane wyjściowe na urządzeniach wyjściowych, takich jak monitor.
- Obiekt cerr jest instancją klasy ostream. Wyświetla obiekty błędów na monitorze.
- Obiekt clog jest instancją klasy ostream. Wyświetla komunikaty o błędach na urządzeniach wyjściowych.
- Obiekt clog buforuje komunikaty o błędach, natomiast obiekt cerr tego nie robi.