Wykłady z podstaw programowania f& Język C/C++
4. Podstawowe operacje we/wy
Operacje we/wy języka programowania pozwalają każdemu procesowi
uruchomionego programu wymieniać informację z jego otoczeniem w systemie
komputerowym. Operacja wejścia polega na wprowadzeniu informacji do
programu, np. pobranie danych z klawiatury, odczyt danych z pliku na dysku,
odbiór komunikatów z innego procesu w systemie. Z kolei zadaniem operacji
wyjścia jest wyprowadzenie informacji z programu, np. wyświetlanie danych
na ekranie monitora, drukowanie tekstu na drukarce, zapisywanie danych w
pliku na dysku, wysyłanie komunikatów do innego procesu w systemie.
Wymiana informacji pomiędzy programem a jego otoczeniem odbywa
się zwykle poprzez odpowiednie kanały zwane strumieniami we/wy. Kanały te
stanowią wirtualny pomost pomiędzy programem a urządzeniami we/wy,
takimi jak konsola (monitor + klawiatura), drukarka, a także pamięć masowa
(np. dysk twardy) i pamięć operacyjna.
Każdy proces uruchomionego programu w systemie może dowolnie
otwierać i zamykać strumienie dotyczące różnych urządzeń we/wy. Spośród
wszystkich strumieni trzy posiadają największe znaczenie, są to strumienie
standardowe, wejścia (stdin), wyjścia (stdout) i błędów (stderr). Strumienie te
są otwierane w chwili uruchomienia programu i zamykane, gdy następuje
zakończenie jego procesu. Zwykle strumień wejściowy jest skojarzony z
klawiaturą, strumień wyjściowy i błędów zaś z monitorem. Użytkownik
programu może w linii poleceń systemu zmienić domyślne przyporządkowanie
i przekierować strumienie do innych urządzeń.
1
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Funkcje operacji we/wy
W językach C i C++ brak jest specjalnych konstrukcji składniowych
(tzn. instrukcji we/wy) odpowiedzialnych za wykonywanie operacji we/wy.
Zamiast tego języki te oferują standardowe biblioteki kodów do wykonywania
tych operacji.
W przypadku języka C (oraz C/C++) operacje we/wy wykonywane są w
stylu proceduralnym poprzez odpowiednie funkcje biblioteki standardowej
języka zadeklarowane w pliku nagłówkowym
(lub ). Poniżej
podano opis wybranych funkcji.
printf - funkcja przeznaczona do wyprowadzania z programu poprzez
strumień stdout (np. wyświetlanie na ekranie) informacji w postaci na ogół
sformatowanego tekstu.
Wywołanie funkcji printf przyjmuje postać:
wersja bez formatowania:
rezultat = printf("tekst");
wersja z formatowaniem:
rezultat = printf("format", wartość_1, wartość_2,..., wartość_N);
Pierwszy argument wywołania funkcji jest typu łańcuchowego i zawiera
format wyprowadzanej informacji. Aańcuch ten składa się z literalnego tekstu,
który zostanie wyprowadzony bez zmian, oraz specjalnych znaków pełniących
rolę kodów formatujących. Kody te służą do połączenia tekstu literalnego z
wartościami danych, podanymi jako następne argumenty wywołania funkcji, w
celu otrzymania wynikowego, sformatowanego tekstu.
Tekst literalny składa się z dowolnych znaków ASCII oraz dodatkowo
ze znaków sekwencji ucieczki (np. \n ).
Kody formatujące rozpoczynają się znakiem '%'. Każde wystąpienie
kodu w formacie odpowiada kolejnej wartości danych. W wynikowym tekście
kolejne wartości pojawiają się w kolejnych polach sformatowanych przez
odpowiednie kody w porządku od lewej do prawej.
2
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Liczba wartości_1,2,...,N w wywołaniu funkcji printf musi być równa
liczbie kodów w formacie. W szczególnym przypadku do funkcji może być
przekazany sam format w postaci jedynie tekstu literalnego. W takim
przypadku funkcja nie wykonuje formatowania podanego tekstu.
Uwaga: Wyprowadzenie do strumienia wyjściowego pojedynczego znaku '%' wymaga
podania w tekście literalnym dwóch znaków "%%".
W wywołaniu funkcji printf można opcjonalnie odczytać rezultat tego
wywołania, w którym funkcja ta zwraca liczbę typu int wyprowadzanych do
strumienia znaków, o ile wywołanie zakończyło się sukcesem, w przeciwnym
razie rezultat jest ujemny.
Poniżej podano zestawienie kodów formatujących dla funkcji printf.
Kod Znaczenie
%c pojedynczy znak
%s łańcuch znaków
%d liczba całkowita w kodzie dziesiętnym ze znakiem
%u liczba całkowita w kodzie dziesiętnym bez znaku
%x liczba całkowita w kodzie szesnastkowym bez znaku
%o liczba całkowita w kodzie ósemkowym bez znaku
%l_ liczba całkowita typu long
%h_ lub typu short
gdzie _ zastępuje jedno z: d u x o
%f liczba rzeczywista w notacji zwykłej
%e liczba rzeczywista w notacji wykładniczej
%g liczba rzeczywista zapisana w krótszym z formatów f lub e
%n* wartość w polu o n pozycjach wyrównana do prawej strony
%-n* lub do lewej strony
gdzie * zastępuje dowolny p/w kod
%.p_ liczba rzeczywista z p cyframi po przecinku
%n.p_ lub dodatkowo z podaniem szerokości pola
%-n.p_ lub dodatkowo z wyrównaniem do lewej
gdzie _ zastępuje jedno z : f e g
3
PDF created with pdfFactory Pro trial version www.pdffactory.com
kody określające typ wartości w polu
szerokość pola i precyzja
Wykłady z podstaw programowania f& Język C/C++
Przykłady:
printf("Tekst prosty!\n"); Tekst prosty!
printf("7 %% 2 = 1\n"); 7 % 2 = 1
printf("znak = %c\n", 'a');
znak = a
printf("lancuch = %s\n", "abc"); lancuch = abc
printf("liczba = %d\n", 10); liczba = 10
printf(">>%5s<<\n", "abc");
>> abc<<
printf(">>%-5s<<\n", "abc"); >>abc <<
printf("x = %f\n", 0.12345678);
x = 0.123457
printf("x = %.3f\n", 0.12345678);
x = 0.123
printf(">>x=%-6.2f<<\n", 0.12345); >>x=0.12 <<
printf("\n");
printf("%d %c %f = %f\n",
2 * 3.14 = 6.28
2, '*', 3.14, 6.28); _
scanf funkcja odpowiedzialna za wprowadzanie do programu poprzez
strumień stdin (np. odczytanie z klawiatury) informacji w postaci głównie
sformatowanego tekstu.
Wywołanie funkcji scanf przyjmuje postać:
wersja bez formatowania:
rezultat = scanf("tekst");
wersja z formatowaniem:
rezultat = scanf("format", adres_1, adres_2,..., adres_N);
Pierwszy argument wywołania funkcji jest typu łańcuchowego i zawiera
format wprowadzanej informacji. Aańcuch ten składa się głównie ze kodów
formatujących podobnych do kodów funkcji printf. Kody te służą do określenia
typu wprowadzanych wartości danych, które po odpowiedniej konwersji
zostaną wpisane do zmiennych o adresach podanych jako następne argumenty
wywołania funkcji.
Adres zmiennej, czyli jej wskazanie, otrzymuje się za pomocą operatora
adresowania '&', np.: wyprażenie &x jest adresem zmiennej x.
4
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Każde wystąpienie kodu w formacie odpowiada kolejnemu adresowi
zmiennych. Liczba adresów_1,2,...,N w wywołaniu funkcji musi być równa
liczbie kodów w formacie.
Aańcuch z formatem może zawierać również tekst literalny. Tekst ten
zostanie wprowadzony do programu bez zmian i zignorowany (użytkownik
programu musi wpisać ten tekst na klawiaturze).W szczególnym przypadku do
funkcji może być przekazany sam format w postaci jedynie tekstu literalnego.
W takim przypadku funkcja jedynie odczyta i zignoruje cały podany tekst.
W wywołaniu funkcji scanf można opcjonalnie odczytać rezultat tego
wywołania, w którym funkcja ta zwraca liczbę typu int wprowadzanych
wartości danych ze strumienia wejściowy i poprawnie przypisanych do
zmiennych o podanych adresach. Liczba ta może być zerem, jeśli żadna dana
nie została przypisana. Jeśli strumień wejściowy wyczerpie się przed
pojawieniem się jakiekolwiek błędu odczytu ze strumienia, to zwracany
rezultat jest równy predefiniowanej wartości EOF (zwykle jest to -1).
Poniżej podano zestawienie kodów formatujących dla funkcji scanf.
Kod Znaczenie
%c pojedynczy znak typu char
%s łańcuch znaków typu char[] dowolnej długości
%ns łańcuch n znaków typu char[m] gdzie m >= n+1
%d liczba całkowita typu int w kodzie dziesiętnym
%u liczba całkowita typu unsigned w kodzie dziesiętnym
%x liczba całkowita typu int w kodzie szesnastkowym bez znaku
%o liczba całkowita typu int w kodzie ósemkowym bez znaku
%i liczba całkowita typu int w dowolnym p/w kodzie
%l_ liczba całkowita typu long
gdzie _ zastępuje jedno z: d u x o i
%f %e %g liczba rzeczywista typu float w notacji dowolnej
%l_ liczba rzeczywista typu double
%L_ liczba rzeczywista typu long double
gdzie _ zastępuje jedno z: f e g
5
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Przykład:
int kod1, kod2;
printf("Podaj kod pocztowy rozdzielony kreską: ");
scanf("%d-%d", &kod1, &kod2);
printf("Kod pocztowy: %d-%d\n", kod1, kod2);
Pozostałe funkcje do operacji we/wy:
getchar odczytuje pojedynczy znak ze strumienia stdin, znak
jest następnie zwracany w wywołaniu funkcji jako rezultat typu
char, funkcja wywołana bez pobrania rezultatu zwykle służy do
zatrzymania programu, np.:
znak = getchar();
getchar();
putchar zapisuje pojedynczy znak do strumienia stdout, znak
jest przekazywany w wywołaniu funkcji jako argument typu
char, np.:
putchar(znak);
gets odczytuje linię znaków ze strumienia stdin zakończoną
znakiem końca linii, który jest zastępowany przez znak końca
łańcucha, linia jest następnie zwracana w wywołaniu funkcji jako
argument typu char[], np.:
gets(linia);
puts zapisuje linię znaków do strumienia stdout, zastępując
znak końca łańcucha znakiem końca linii, linia jest przekazywana
w wywołaniu funkcji jako argument typu const char[], np.:
puts(linia);
6
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Obiektowe operacje we/wy
W przypadku języka C++ operacje we/wy są wykonywane w stylu
obiektowym. Biblioteka we/wy tego języka, dostępna głównie poprzez plik
nagłówkowy , zawiera obiekty i ich klasy przeznaczone do
wykonywania operacji we/wy.
Klasy w bibliotece we/wy modelują pojęcie strumieni danych, natomiast
obiekty tych klas reprezentują konkretne strumienie w programie skojarzone z
odpowiednimi urządzeniami we/wy. Klasy zawierają wiele metod (funkcji)
przeznaczonych do odczytu i zmiany właściwości obiektów tych klas.
W bibliotece języka C++ zdefiniowano kilka następujących klas
strumieni we/wy, różniących się specyfiką metod oraz urządzeń we/wy.
ios klasa dowolnego strumienia we/wy, zawiera ogólne metody
do manipulacji stanem strumienia we/wy
istream klasa dowolnego strumienia wejściowego, zawiera
głównie metody do odczytu danych ze strumienia wejściowego
ostream klasa dowolnego strumienia wyjściowego, zawiera
głównie metody do zapisu danych do strumienia wyjściowego
fstream, ifstream, ofstream klasy specjalizowane dla
strumieni we/wy skojarzonych ze plikami w pamięci masowej,
zadeklarowane są w pliku nagłówkowym
strstream, istrstream, ostrstream klasy specjalizowane dla
strumieni we/wy skojarzonych ze łańcuchem znakowym char[] w
pamięci operacyjnej, zadeklarowane są w pliku nagłówkowym
; uwaga: klasy te są wycofane ze standardem C++98
stringstream, istringstream, ostringstream nowe klasy
specjalizowane dla strumieni we/wy skojarzonych ze łańcuchem
znakowym typu string w pamięci operacyjnej, zadeklarowane są
w pliku nagłówkowym
7
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Ponadto, biblioteka we/wy języka C++ zawiera definicje następujących
obiektów reprezentujących różne konkretne strumienie.
cin obiekt klasy istream dla standardowego strumienia stdin
cout obiekt klasy ostream dla standardowego strumienia stdout
cerr obiekt klasy ostream dla standardowego strumienia stderr
clog obiekt klasy ostream dla standardowego strumienia stderr
Zwykle obiekt cout służy do wyświetlania informacji na ekranie w
postaci sformatowanego tekstu i jest odpowiednikiem funkcji printf. Natomiast
obiekt cin jest przeznaczony do pobierania wartości danych z klawiatury i
przypisywania ich do podanych zmiennych, a zatem odpowiada funkcji scanf.
Dodatkowo w języku C++ można bezpośrednio wykonywać operacje na
standardowym strumieniu błędów stderr poprzez obiekty cerr i clog. Zwykle
zatem obiekty te umożliwiają wyświetlanie informacji na ekranie w postaci
sformatowanych komunikatów. W przypadku obiektu cerr informacja ta nie
jest buforowana, dzięki czemu wyświetlanie jej na ekranie zachodzi
natychmiast, co przydaje się w przypadku komunikatów o błędach programu. Z
kolei buforowany strumień clog stosowany jest jedynie do wyświetlania
zwykłych komunikatów, np. dotyczących przebiegu programu.
Uwaga: W języku C również istnieje możliwość wykonywania operacji na strumieniu
stderr, jednakże w tym celu należy użyć osobne funkcje fprintf i fscanf, które wymagają
podania jako pierwszy argument nazwy strumienia typu FILE. Szczegółowo funkcje te
zostaną opisane na wykładzie poświęconym bibliotece standardowej języka C.
Klasa ios zawiera między innymi następujące metody stanu i formatu:
rdstate metoda do odczytu wszystkich znaczników stanu
dowolnego strumienia we/wy
setstate metoda do włączenia podanego znacznika stanu
dowolnego strumienia we/wy
8
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
good, bad, fail pomocnicze metody do sprawdzenia, czy
dowolny strumień we/wy znajduje się w stanie normalnym, błędu
lub awarii
eof pomocnicza metoda do sprawdzenia, czy dowolny strumień
we/wy znajduje się w stanie końca (wyczerpania zasobów)
clear pomocnicza metoda do przywrócenia stanu normalnego
po wystąpieniu stanu błędu, awarii lub końca
flags metoda do odczytu i zmiany wszystkich znaczników
formatu dowolnego strumienia we/wy
setf metoda do włączenia podanego znacznika formatu
dowolnego strumienia we/wy
unsetf metoda do wyłączenia podanego znacznika formatu
dowolnego strumienia we/wy
width metoda do odczytu i zmiany minimalnej szerokości pola
w sformatowanym tekście dla strumienia wy, ustawiona tu
szerokość jest zastępowana zerem po następnej operacji zapisu
fill metoda do odczytu i zmiany znaku wypełniającego puste
miejsca w polu sformatowanego tekstu dla strumienia wy
precision metoda do odczytu i zmiany ilości cyfr mantysy w
liczbie rzeczywistej wyprowadzanej do strumienia wy
Metody rdstate, setstate, clear dostępne w klasy ios operują na stanie
strumienia przy użyciu następujących znaczników ze klasy ios:
ios::goodbit stan normalny
ios::badbit stan błędu
ios::failbit stan awarii
ios::eofbit stan końca
9
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Metody flags, setf, unsetf dostępne w klasie ios operują na formacie
strumienia przy użyciu następujących znaczników ze klasy ios:
ios::dec liczby całkowite są przedstawiane w kodzie dziesiętnym
ios::oct liczby całkowite są przedstawiane w kodzie ósemkowym
ios::hex liczby całkowite są przedstawiane w kodzie szesnastkowym
ios::scientific liczby rzeczywiste są przedstawiane w notacji wykładniczej
ios::fixed liczby rzeczywiste są przedstawiane w zwykłej notacji
ios::showbase dodanie przedrostka: '0x' dla liczb szesnastkowych lub '0' dla ósemkowych
ios::showpoint dodanie kropki oraz zer końcowych w liczbach rzeczywistych
ios::uppercase użycie wielkich liter w kodzie szesnastkowym lub notacji wykładniczej
ios::showpos przed wartościami dodatnimi jest wstawiany znak plus
ios::boolalpha wartości logiczne przedstawiane są jako literały false i true
ios::left wyrównanie wartości do lewej strony pola
ios::right wyrównanie wartości do prawej strony pola
ios::internal znak lub przedrostek zostaje wyrównany do lewej, a liczba do prawej
ios::skipws usunięcie wiodących białych spacji przed wprowadzaną wartością
ios::unitbuf informacja jest wprowadzana do strumienia bez buforowania
Metoda setf może dodatkowo przed włączeniem podanego znacznika
wykonać zerowanie całych grup p/w znaczników, co wykonywane jest przy
użyciu następujących masek ze klasy ios:
ios::adjustfield = ios::left | ios::right | ios::internal dla znaczników wyrównania
ios::basefield = ios::dec | ios::oct | ios::hex dla znaczników kodu liczb całkowitych
ios::floatfield = ios::scientific | ios::fixed dla znaczników notacji liczb rzeczywistych
Klasa istream zawiera między innymi następujące metody odczytu:
get - odczytuje pojedynczy znak ze strumienia wejściowego, znak
jest następnie zwracany w wywołaniu metody jako argument
ignore - odczytuje podaną ilość znaków ze strumienia
wejściowego i odrzuca je
10
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
getline odczytuje linię znaków ze strumienia wejściowego o
zadanej długości lub zakończoną danym znakiem końca linii i
usuwa ten znak ze linii, następnie linia wraz ze dołączonym
znakiem końca łańcucha jest zwracana w wywołaniu metody jako
argument
Klasa ostream zawiera między innymi następujące metody zapisu:
put zapisuje pojedynczy znak do strumienia wyjściowego, znak
jest przekazywany w wywołaniu metody jako argument
flush powoduje przeniesienie zawartości wewnętrznego bufora
do strumienia wyjściowego, w przypadku gdy zapis do strumienia
jest buforowany
Przykłady:
użycie metod do manipulowania stanem strumienia
cin.setstate( ios::failbit );
if ( cin.fail() )
printf("Strumien cin jest w stanie awarii !\n");
cin.clear();
użycie metod do manipulowania formatem strumienia
int i = 10;
cout << i << endl; // wyprowadza: 10
cout.unsetf( ios::dec );
cout.setf( ios::hex );
cout << i << endl; // wyprowadza: A
cout.setf( ios::dec, ios::basefield );
cout << i << endl; // wyprowadza: 10
cout.width(5); cout.fill('#');
cout << i << endl; // wyprowadza: ###10
11
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
użycie metod do odczytu i zapisu danych
char znak;
char linia[12];
cin.get( znak ); // wprowadza pojedynczy znak
cin.ignore( 3 ); // wprowadza 3 znaki i odrzuca je
cin.getline( linia, 11); // wprowadza 11 znaków
// aż do znaku '\n' (naciśnięcia
// klawisza ENTER)
cin.getline( linia, 11, '.'); // wprowadza 11 znaków
// aż do znaku '.'
cout.put( znak ); // wyprowadza pojedynczy znak
// do bufora wewnętrznego
cout.flush(); // przenosi zawartość bufora na ekran
Przedstawione wyżej metody umożliwiają "niskopoziomowy" dostęp do
strumieni. Wygodniejszy w użyciu jest dostęp do strumieni poprzez operatory
we/wy dostępne w klasie istream/ostream. Najczęściej użycie tych operatorów
przyjmuje następującą postać:
wprowadzanie danych:
strumien_we >> zmienna_1 >> zmienna_2 >> ...
wyprowadzanie sformatowanego tekstu:
strumien_wy << wyrazenia_1 << wyrazenia_2 << ...
Operacja wprowadzania danych do programu wymaga podania nazwy
obiektu strumienia wejściowego oraz nazw zmiennych, którym odczytane ze
strumienia wartości danych zostaną przypisane. Konwersja tych wartości
odbywa się na podstawie typu podanych zmiennych i nie wymaga stosowania
dodatkowych kodów formatujących.
12
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Podobnie operacja wyprowadzania informacji z programu wymaga
podania nazwy obiektu strumienia wyjściowego oraz wyrażeń, na podstawie
których zostanie utworzony i sformatowany tekst wynikowy. Wyrażenia mogą
zawierać dowolny tekst literalny, wyprowadzany bez zmiany, lub wartości
danych o typie znakowym, numerycznym itd. Tekst literalny i wartości danych
są następnie odpowiednio połączone w wynikowym tekście bez konieczności
stosowania dodatkowych kodów formatujących.
Wszelkie operacja związane z formatem strumienia, szerokością pola,
precyzją liczb itd. można wykonać na rzecz danego obiektu strumienia poprzez
podane wyżej metody klas. Jednakże wygodniejsze w użyciu jest stosowanie
wraz z p/w operatorami specjalnych procedur zwanych manipulatorami.
Wywołanie tych procedur może wystąpić w miejscu zmiennej w przypadku
operatora >> lub częściej jako wyrażenie dla operatora <<.
Manipulatory mogą posiadać argumenty wywołania ujęte w nawiasy
okrągłe i podane za identyfikatorem manipulatora, podobnie jak w przypadku
wywołania zwykłych funkcji lub metod. W przypadku braku argumentów
podaje się sam identyfikator manipulatora bez pustych nawiasów.
Większość manipulatorów służy do operowania na znacznikach formatu
podanych wyżej dla klasy ios, a zatem zastępują metody flags, setf, unsetf tej
klasy. Pozostałe manipulatory również zastępują jakieś metody podane wyżej.
Podstawowe manipulatory zadeklarowane w pliku :
dec liczby całkowite są przedstawiane w kodzie dziesiętnym
oct liczby całkowite są przedstawiane w kodzie ósemkowym
hex liczby całkowite są przedstawiane w kodzie szesnastkowym
scientific liczby rzeczywiste są przedstawiane w notacji wykładniczej
fixed liczby rzeczywiste są przedstawiane w zwykłej notacji
showbase dodanie przedrostka: '0x' dla liczb szesnastkowych lub '0' dla ósemkowych
noshowbase operacja przeciwna do p/w
showpoint dodanie kropki oraz zer końcowych w liczbach rzeczywistych
noshowpoint operacja przeciwna do p/w
uppercase użycie wielkich liter w kodzie szesnastkowym lub notacji wykładniczej
nouppercase operacja przeciwna do p/w
13
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
showpos przed wartościami dodatnimi jest wstawiany znak plus
noshowpos operacja przeciwna do p/w
boolalpha wartości logiczne przedstawiane są jako literały false i true
noboolalpha operacja przeciwna do p/w
left wyrównanie wartości do lewej strony pola
right wyrównanie wartości do prawej strony pola
internal znak lub przedrostek zostaje wyrównany do lewej, a liczba do prawej
skipws usunięcie wiodących białych spacji przed wprowadzaną wartością
noskipws operacja przeciwna do p/w
unitbuf informacja jest wprowadzana do strumienia bez buforowania
nounitbuf operacja przeciwna do p/w
ws jednorazowe odczytanie i odrzucenie wiodących białych spacji
endl wyprowadza do strumienia znak końca linii '\n' i wykonuje flush
ends wyprowadza do strumienia znak końca łańcucha '\0'
flush przenosi zawartość wewnętrznego bufora do strumienia
Dodatkowe manipulatory zadeklarowane w pliku :
setbase(b) ustawia kod zapisu liczb wg podanej wartości b
(0 - dziesiętny, 8 - ósemkowy, 10 - dziesiętny, 16 - szesnastkowy)
setw(n) ustawia minimalną szerokość pola na n pozycji
setfill(z) ustawia podany znak z dla wypełniania pustych miejsc pola
setprecision(d) ustawia podaną długość d dla mantysy liczb rzeczywistych
setiosflags(z) włącza podany znacznik z dla formatu strumienia
resetiosflags(z) wyłącza podany znacznik z dla formatu strumienia
Przykłady:
int i;
double f;
cin >> i; cin >> f;
cout << dec << setw(5) << setfill('#') << i << endl;
cout << setw(6) << setprecision(2) << x << endl;
14
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wykłady z podstaw programowania f& Język C/C++
Porównanie operacji proceduralnych i obiektowych
// styl proceduralny w C90 // styl obiektowy w C++98
#include #include
using namespace std;
void main() void main()
{ {
char a;
char a;
int i;
int i;
long j;
long j;
double x;
double x;
char t[ 20 ];
char t[ 20 ];
cin >> a; // cin.get(a);
scanf( "%c", &a );
cin >> i;
scanf( "%d", &i );
cin >> j;
scanf( "%ld", &j );
cin >> x;
scanf( "%lf", &x );
cin.getline(t, 19);
scanf( "%19s", t );
printf( "char = %c \n", a ); cout << "char = " << a << "\n";
printf( "int = %d \n", i ); cout << "int = " << i << endl;
printf( "long = %ld \n", j ); cout << "long = " << j << endl;
printf( "double = %5.2f \n", x ); cout << "double = " << setw(5)
<< setprecision(3) << x << endl;
printf( "char[] = %s \n", t ); cout << "char[] = " << t << endl;
} }
15
PDF created with pdfFactory Pro trial version www.pdffactory.com
Wyszukiwarka
Podobne podstrony:
w08 PodstPrzy roznor
KOMUNIKACJA PODSTPSYCH WYK2
podstprog01
w02 PodstPrzy zycie
podstprog02
podstpr
w04 PodstPrzy proddekomp
w07 PodstPrzy krajobrazy
podstprog07
podstprog10
podstprog09
w05 PodstPrzy cykle
podstprog06
w06 PodstPrzy klimat
więcej podobnych podstron