podstprog04


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