• Nie Znaleziono Wyników

W5 – Strumienie wejścia-wyjścia

N/A
N/A
Protected

Academic year: 2021

Share "W5 – Strumienie wejścia-wyjścia"

Copied!
17
0
0

Pełen tekst

(1)

Podstawy

programowania I

Wykład nr 5

Mechanizmy wprowadzania i wyświetlania danych

autor: dr inż. Michał Łabowski

▪ michal.labowski@wat.edu.pl

▪ www.mlabowski.wel.wat.edu.pl

wersja 1.0

(2)

Obsługa wejścia-wyjścia w C++

2

• Program najczęściej musi być interaktywny, tzn. musi reagować na dane dostarczone z zewnątrz i udostępniać wyniki swojej pracy.

• W C++ realizowane to jest za pomocą tzw. strumieni

• strumień bajtów – bajty są wstawiane do strumienia i pobierane ze strumienia

• strumień odgrywa rolę pośrednika pomiędzy programem a źródłem lub miejscem docelowym

• strumień wymaga dwóch połączeń

• strumień korzysta z bufora (bloku pamięci), który jest miejscem tymczasowego przechowywania danych

• pliki nagłówkowe: iostream i fstream (wchodzą w skład bliblioteki

standardowej)

(3)

Obsługa wejścia-wyjścia w C++

Plik iostream:

• obiekt iostream dziedziczy* po klasie istream (input stream) i ostream (output stream)

• po dołączeniu nagłówka tworzone są obiekty: cin – odpowiada za standardowy strumień wejściowy, cout - odpowiada za standardowy strumień wyjściowy, cerr - odpowiada za standardowy strumień błędów

Obiekt cout:

• domyślnie skojarzony ze standardowym wyjściem – ekranem

• zamienia dane binarne (np. zmienną typu float o wartości 2.55) na ciąg znaków (2 . 5 5)

• używany zazwyczaj z operatorem wstawienia <<

• w celu wyświetlenia danych bufor wyjściowy musi zostać opróżniony (modyfikatory flush, endl)

• rozmiar bufora wynosi standardowo 512 bajtów

(4)

Strumień wyjścia

4

Nr linii Opis

1 Dołączamy plik nagłówkowy iostream zawierający deklarację klasy iostream

7 do strumienia wyjściowego (obiektu cout) wstawiamy literał znakowy. Do literału dołączany jest manipulator endl, który wstawia znak nowego wiersza i powoduje opróżnienie bufora.

8-9 Do obiektu cout możemy przekazać także obiekt klasy string. W tym przypadku wyświetlimy zawartość obiektu string, za nowy wiersz odpowiada manipulator endl.

(5)

Strumień wyjścia

Nr linii Opis

10 - 11 Obiekt cout potrafi konwertować na znaki wartości typów podstawowych, dlatego wartość zmiennej pole (float) możemy wstawić bezpośrednio do strumienia

13 - 14 Wartość zmiennej można także przekonwertować na ciąg znaków (string) i dodać go do innego ciągu za pomocą operatora dodawania. Tak powstały ciąg można wstawić do strumienia

(6)

Strumień wyjścia

6

Znak specjalny Opis

\n Nowa linia

\t Tabulacja pozioma (do wyrównywania tekstów o różnej długości)

\r Powrót kursora na początek wiersza

\b Cofnięcie kursora o jeden znak

\a Generowanie sygnału dźwiękowego

(7)

setw setw() - modyfikacja szerokości pola wykorzystywanego do wyświetlenia wartości:

• obowiązuje jedynie dla kolejnej wyświetlanej wartości

Szerokość pola: 5 znaków

Szerokość pola: 10 znaków

Nr linii Opis

2 Dołączenie pliku nagłówkowego iomanip zawierającego deklarację metody setw()

8-9 Wykorzystanie metody setw() do modyfikacja szerokości pola, na którym

wyświetlana jest wartość zmiennej my_pi. Modyfikacja szerokości pola

obowiązuje jedynie dla kolejnej wyświetlanej wartości.

(8)

setprecision

8

setprecision() - modyfikacja precyzji (liczby cyfr) w wyświetlanej liczbie:

• domyślna precyzja: 6

• obowiązuje do momentu kolejnej zmiany

Nr linii Opis

2 Dołączenie pliku nagłówkowego iomanip zawierającego deklarację metody setprecision()

7 Wyświetlane jest pięć cyfr. W trybie domyślnym precyzja oznacza całkowitą liczbę wyświetlanych cyfr

8 Wyświetlane są wszystkie cyfry w liczbie, jest ich mniej niż 9

9 Włączenie modyfikatora fixed – od tej pory precyzja oznacza liczbę cyfr po przecinku

5 cyfr

5 cyfr po

przecinku

(9)

dec, hex, oct dec, hex, oct - modyfikacja systemu, w którym wyświetlana jest liczba:

Nr linii Opis

6 Modyfikator dec powoduje wyświetlenie liczby w zapisie dziesiętnym 7 Modyfikator hex powoduje wyświetlenie liczby w zapisie szesnastkowym 8 Modyfikator oct powoduje wyświetlenie liczby w zapisie ósemkowym

(10)

Strumień wejścia

10

Standardowy strumień wejścia obsługiwany jest przez obiekt cin:

• strumień wejściowy jest strumieniem znakowym

• operator >> służy do pobrania znaków ze strumienia wejściowego

• po prawej stronie tego operatora podaje się zmienną, do której mają trafić dane:

cin >> miejsce_przechowywania_wartości

• cin na podstawie typu zmiennej przeznaczonej do przechowania wartości

dokonuje konwersji (rzutowania) ciągu znaków na typ tej zmienne

(11)

Strumień wejścia Standardowy strumień wejścia obsługiwany jest przez obiekt cin:

• pomija znaki niedrukowane (np. spacje)

Nr linii Opis

10 Strumień bajtów pobierany jest do momentu napotkania spacji, wtedy jest on konwertowany do typu zmiennej i operacja się powtarza

(12)

Strumień wejścia

12

Standardowy strumień wejścia obsługiwany jest przez obiekt cin:

• zwraca wartość typu bool, która oznacza status odczytu danych

• w przypadku błędu konwersji (np. 100d zamiast wartości 100) znak powodujący

problem pozostaje w buforze wejściowym i od niego rozpocznie się następny

odczyt

(13)

printf Funkcja printf:

• znana z języka C funkcja służąca do przekierowania ciągu znaków do strumienia wyjściowego (wyświetlenia na ekranie).

Nr linii Opis

1 Definicja funkcji printf znajduje się w bibliotece stdio.h

7 Proste zastosowanie funkcji printf do wyświetlenia ciągu znaków

8 W funkcji printf liczby wprowadzane są do sformatowanego ciągu znaków za pomocą specyfikatorów konwersji, rozpoczynających się od znaku %. Po zamknięciu cudzysłowu wymieniane są zmienne, w kolejności takiej, w jakiej mają pojawić się w tekście.

(14)

printf

14

Wykaz specyfikatorów (ze stronu http://www.cplusplus.com/reference/)

specifier Output Example

d or i Signed decimal integer 392

u Unsigned decimal integer 7235

o Unsigned octal 610

x Unsigned hexadecimal integer 7fa

X Unsigned hexadecimal integer (uppercase) 7FA

f Decimal floating point, lowercase 392.65

F Decimal floating point, uppercase 392.65

e Scientific notation (mantissa/exponent), lowercase 3.9265e+2 E Scientific notation (mantissa/exponent), uppercase 3.9265E+2 g Use the shortest representation: %e or %f 392.65 G Use the shortest representation: %E or %F 392.65

a Hexadecimal floating point, lowercase -0xc.90fep-2 A Hexadecimal floating point, uppercase -0XC.90FEP-2

c Character a

s String of characters sample

p Pointer address b8000000

(15)

printf Modyfikatory specyfikatorów konwersji – litery wstawiane pomiędzy znak % a specyfikator konwersji, zmieniające sposób działania tegoż specyfikatora [3].

Modyfikator Opis

znacznik - wyrównuje wartość do lewej krawędzi pola (np. %-20s) + wyświetla wartość ze znakiem plus lub minus (np. %+6.2f)

odstęp wyświetla wartość z odstępem na początku (bez znaku plus), lub ze znakiem minus jeśli jest ujemna (np. % 6.2f)

liczba Minimalna szerokość pola (jeśli wartość się nie mieści zostanie użyte większe pole)

.liczba Dokładność, w przypadku %e, %E i %f to liczba cyfr po przecinku. Dla %g i

%G to maksymalna liczba cyfr znaczących, dla %s – maksymalna liczba wyświetlanych znaków. Dla liczb całkowitych – minimalna liczba wyświetlanych cyfr (w razie potrzeby na początku dodawane są zera)

(16)

scanf

16

Funkcja scanf, znana z języka C, to odpowiednik obiektu cin z C++. Stosowana jest do odczytywania ciągu znaków ze standardowego wejścia i przekształcania ich na wartość zmiennej zgodnie z podanym formatem. Składnia:

scanf(lancuch_formatujacy , adres_zmiennej_docelowej);

Nr linii Opis

3 Funkcja scanf konwertuje wejściowy ciąg znaków na liczbę zmiennoprzecinkową pojedynczej precyzji (%f), zaś wynik przypisuje do zmiennej odleglosc. Znak &

(ang. ampersand) powoduje, że do funkcji scanf przekazywany jest adres zmiennej odleglosc.

(17)

Literatura:

[1] Grębosz J., Opus Magnum C++, Helion, Gliwice, 2018

[2] Prata S., Język C++ Szkoła programowania, Helion, Gliwice, 2013

[3] Prata S., Język C Szkoła programowania, Helion, Gliwice, 2012

Cytaty

Powiązane dokumenty

3 Funkcja scanf konwertuje wejściowy ciąg znaków na liczbę zmiennoprzecinkową pojedynczej precyzji (%f), zaś wynik przypisuje do zmiennej odleglosc. ampersand) powoduje, że do

Przekształcenia całkowe.

Jak zmieni się odpowiedź, gdy wykonamy rysunek biorąc za jednostkę na osiach śred- nicę atomu (10 −8 cm) lub średnicę jądra atomowego (10 −13

Niech G będzie

zawierającej kod instrukcji, od której należy kontynuować program główny (jest to zawartość dwóch rejestrów: rejestru segmentu kodu i wskaźnika instrukcji). Informacje te

Jeśli wyświetlimy plik1 za pomocą cat, moŜemy działanie tego polecenia umieścić w pliku plik2.. cat plik1 &gt; plik2 MoŜemy tez

 Metoda przeglądania - dane są wymieniane miedzy procesorem a modułem we/wy, procesor czeka na zakończenie operacji we/wy, sprawdzana jest gotowość/zajętość

Wskaźnik stosu jest dekrementowany o jeden kiedy dane są odkładane na stos przez instrukcję PUSH i jest dekrementowany o dwa (lub 3 dla procesora ATMega256)