background image

Funkcje wejścia/wyjścia w stylu C

Funkcja printf
Funkcja printf jest zadeklarowana w pliku nagłówkowym <stdio.h>. Funkcja wysyła znaki 
na standardowe wyjście o nazwie stdout. Podstawowy nagłówek 

int printf (const char *format [, argument, ...]); 

gdzie:
format - łańcuch formatujący, zawierający specyfikatory formatu i zwykłe znaki 
argument,... - ciąg argumentów

Funkcja wykonuje następujące czynności: 

otrzymuje wiele argumentów w postaci wyrażeń

wykorzystuje do każdego argumentu tzw. specyfikator formatu (pierwszy 
specyfikator do pierwszego argumentu, drugi do drugiego itd.) np. %i do argumentu 
typu całkowitego 

wysyła na wyjście (stdout) np. ekran zawartość łańcucha formatującego 

w przypadku błędu zwraca znak EOF

Uwagi: 

musi być tyle argumentów, ile jest specyfikatorów

jeśli istnieje więcej argumentów niż specyfikatorów, są one ignorowane 

Specyfikator formatu ma postać: 
%[flags] [width] [.prec] [F|N|h|l|L] type_char 
z czego tylko type_char jest wymagany, pozostałe składniki są opcjonalne. 

Specyfikator konwersji (type_char)

Specyfikator 

konwersji 

Dana wejściowa 

całkowita dziesiętna liczba ze znakiem 

całkowita dziesiętna liczba ze znakiem 

całkowita ósemkowa bez znaku 

całkowita dziesiętna bez znaku 

całkowita heksadecymalna bez znaku z literami (a, b, c, d, e, f) 

całkowita heksadecymalna bez znaku z literami (A, B, C, D, E, F) 

rzeczywista w zapisie dziesiętnym 

rzeczywista: format z wykładnikiem e 

rzeczywista: format z wykładnikiem E 

wybrany krótszy format: f lub e 

wybrany krótszy format: f lub E 

pojedynczy znak 

łańcuch, drukuje znaki do znaku kończącego łańcuch –zero 

wyprowadza znak % 

wyprowadza tyle znaków, ile podano pod adresem skojarzonym 

wskaźnik, zależnie od modelu pamięci format: XXXX:YYYY lub 
YYYY 

background image

Znaczniki (flags)

Znacznik 

Znaczenie 

wyrównuje tekst od lewej, spacje z prawej strony, jeśli muszą być 
dołożone 

wyprowadzana wartość zawsze ze znakiem + lub – 

spacja 

wyprowadzana wartość zawiera albo znak – albo spację 

używany, gdy konwersja argumentu przebiega wg alternatywnej 
formy (gdy ósemkowa, znak 0 na początku, gdy heksagonalna to na 
począku 0x lub 0X) 

Szerokość (width) - minimalna liczba znaków do wyprowadzenia tekstu uzupełniana 

spacjami lub zerami

Wartość

Znaczenie 

uzupełnianie spacjami do rozmiaru n znaków 

0n 

uzupełnianie zerami do rozmiaru n znaków 

przed argumentem związanym z % umieszcza się wyrażenie 
określające aktualny rozmiar wyprowadzanego tekstu 

Precyzja (prec) - maksymalna liczba znaków części dziesiętnej

Wartość 

Znaczenie 

liczba cyfr części dziesiętnej 

przed argumentem związanym z % umieszcza się wyrażenie 
określające aktualny rozmiar części dziesiętnej 

[F|N|h|l|L] wewnętrzny modyfikator rozmiaru 

Wartość 

Znaczenie 

near pointer (za wyjątkiem modelu huge) 

short int 

far pointer 

long int, double 

long double 

Przykład 

background image

Funkcja scanf 

Funkcja scanf jest zadeklarowana w pliku nagłówkowym <stdio.h>. Funkcja pobiera znaki 
ze standardowego wejścia stdin np. z klawiatury. Podstawowy nagłówek 

int scanf ( const char *format [, address, ...]); 

gdzie:
format - łańcuch formatujący, zawierający specyfikatory formatu i zwykłe znaki 
address,...- ciąg adresów argumentów

Funkcja wykonuje następujące czynności: 

 otrzymuje wiele argumentów, które pobiera znak po znaku z wejścia stdin np. z 

klawiatury

 wykorzystuje do każdego argumentu tzw. specyfikator formatu (pierwszy specyfikator do 

pierwszego argumentu, drugi do drugiego itd.) np. %i do adresu argumentu typu 
całkowitego,

 wysyła daną po konwersji, zgodną ze specyfikatorem formatu, pod związany z nią adres 

 funkcja zwraca liczbę poprawnie pobranych danych, poddanych konwersji i wysłanych 

pod wskazany adres – różna liczba specyfikatorów i wynik scanf oznacza błąd 

zwraca znak EOF, jeśli nie ma danych (naciśnięto np. F6) 

Uwagi: 
- musi być tyle adresów argumentów, ile jest specyfikatorów, dopasowanych do typu danej 
- jeśli istnieje więcej argumentów niż specyfikatorów, są one ignorowane 
- ciąg znaków jest czytany do białych znaków (np. spacji) 

Specyfikator formatu ma postać
% [*] [width] [F|N] [h|l|L] type_char

Specyfikator konwersji 

Specyfikator 

konwersji 

Dana wejściowa 

liczba dziesiętna ze znakiem 

liczba dziesiętna ze znakiem 

liczba dziesiętna bez znaku 

liczba w kodzie szesnastkowym (bez znaku) 

liczba w kodzie ósemkowym (bez znaku) 

liczba zmiennoprzecinkowa 

liczba zmiennoprzecinkowa 

liczba zmiennoprzecinkowa 

pojedynczy znak 

łańcuch znaków 

* – pomija się wynik konwersji wprowadzonego łańcucha 
szerokość – ogranicza się liczbę czytanych znaków 
[F|N] opcjonalne – modyfikator rozmiaru wskaźnika 
[h|l|L] opcjonalne – modyfikator typu argumentu 

background image

Wartość 

Znaczenie 

far 

near 

short int (d, u, x , o) 

long int (d, u, x , o) 

double (f, e, g) 

long double (f, e, g) 

Przykład

&wiek i &ilosc to odwołania do pamięci, w której należy zapisać wczytane wartości.
Pominięcie & w środowisku Dev-C++ powoduje zawieszenie się działania programu!
Dla tablic będziemy podawać nazwę tablicy bez &. 

Ćwiczenia 
1. Napisz program w stylu C, który wczytuje ilość przedmiotów i ocenę z programowania z 
poprzedniego semestru a następnie wyświetla je po odpowiednich komunikatach. 

background image

Funkcje wejścia/wyjścia w stylu C++ 

Wyświetlanie danych przy pomocy cout 

Wyświetlenie znaków w C++ możliwe jest dzięki instrukcji 

cout << zmienna;

Obiekt cout jest zdefiniowany w bibliotece iostream. Operator << dostosowuje się do typu 
danych, które po nim występują i wyświetla liczby jako liczby a napisy jako napisy. Aby 
możliwe było korzystanie z obiektu cout, należy za pomocą instrukcji 
#include <iostream> 
dołączyć bibliotekę zawierającą definicję obiektu. Ponadto za pomocą instrukcji 
using namespace std; 
musimy dołączyć przestrzeń nazw std, w której się znajduje (albo wywoływać obiekt 
std::cout).

Przykład 

Możliwe jest łączenie kilku kolejnych instrukcji cout w jedną. Ciąg instrukcji:

Wczytywanie danych przy pomocy cin 
Wczytanie danych z klawiatury w C++ możliwe jest dzięki instrukcji: 
cin >> zmienna; 
Dane wejściowe w C++ są strumieniem znaków wpływających do programu. W pliku 
iostream zdefiniowano obiekt cin jako obiekt realizujący ten strumień. Operator >> pobiera 
znaki ze strumienia wejściowego i wstawia do zmiennej znajdującej się za nim. Podobnie 
jak w przypadku obiektu cout, niezbędne są instrukcje: 

#include <iostream> 
using namespace std; 

background image

Przykład 

Ćwiczenia 
1. Napisz program, który wczytuje ilość przedmiotów i ocenę z programowania z 
poprzedniego semestru a następnie wyświetla je po odpowiednich komunikatach.