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:

  1. Najpierw inicjowany jest strumień odpowiedniego typu.
  2. Następnie powinieneś określić, gdzie I / O nastąpi przy użyciu wskaźników get/put.
  3. 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:

std::out

Oto zrzut ekranu kodu:

std::out

Wyjaśnienie kodu:

  1. Dołącz plik nagłówkowy iostream, w którym zdefiniowany jest obiekt cout.
  2. Dołącz przestrzeń nazw std, abyśmy nie musieli jej wywoływać podczas korzystania z jej klas.
  3. Wywołaj funkcję main(). Kod programu należy dodać w jego treści. Otwierający nawias klamrowy { oznacza początek treści.
  4. Utwórz zmienną znakową o nazwie Welcome, która będzie przechowywać ciąg Witamy w Guru99.
  5. 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.
  6. Program musi zwrócić wartość po pomyślnym wykonaniu.
  7. 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:

std::cin

Oto zrzut ekranu kodu:

std::cin

Wyjaśnienie kodu:

  1. Dołącz plik nagłówkowy iostream do naszego programu. Obiekt cin jest zdefiniowany w tym pliku nagłówkowym.
  2. Dołącz przestrzeń nazw std, aby użyć jej klas. Nie będziesz musiał wywoływać std podczas korzystania z jego klas.
  3. Wywołaj funkcję main(). Kod programu należy dodać w jego treści.
  4. Początek treści programu.
  5. Zadeklaruj zmienna całkowita nazwany numer.
  6. Wydrukuj na ekranie komunikat proszący użytkownika o wprowadzenie numeru.
  7. Odczytaj z klawiatury wartość wprowadzoną przez użytkownika na konsoli.
  8. Wydrukuj wartość przeczytaną powyżej na konsoli wraz z innym tekstem.
  9. Program powinien zwrócić wartość, jeśli zostanie pomyślnie wykonany.
  10. 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:

std::cerr

Oto zrzut ekranu kodu:

std::cerr

Wyjaśnienie kodu:

  1. Dołącz plik nagłówkowy iostream, w którym zdefiniowano obiekt cerr.
  2. Dołącz przestrzeń nazw std, abyśmy nie musieli jej wywoływać podczas korzystania z jej klas.
  3. Wywołaj funkcję main(). Logikę programu należy dodać w jego treści. Otwierający nawias klamrowy wyznacza początek treści funkcji.
  4. Użyj obiektu cerr, aby wydrukować błąd na konsoli.
  5. Program musi zwrócić wartość po pomyślnym wykonaniu.
  6. 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:

std::zatkać

Oto zrzut ekranu kodu:

std::zatkać

Wyjaśnienie kodu:

  1. Łącznie z plikiem nagłówkowym iostream, w którym zdefiniowany jest obiekt zatykający.
  2. Dołączamy przestrzeń nazw std, abyśmy mogli używać jej klas bez wywoływania jej.
  3. Wywołanie funkcji main(). Logikę programu należy dodać w jego treści. { oznacza początek treści funkcji.
  4. Użyj obiektu clog, aby wydrukować błąd na standardowym wyjściu, monitorze.
  5. Program musi zwrócić wartość po pomyślnym zakończeniu.
  6. 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.