DODATEK B BIBLIOTEKA STANDARDOWA
Tablica B-1. Przekształcenia funkcji printf
Znak |
Typ argumentu |
Przekształcany do postaci |
d, i |
int |
liczby dziesiętnej ze znakiem. |
0 |
int |
liczby ósemkowej bez znaku (bez wiodącego zera). |
x, X |
int |
liczby szesnastkowej bez znaku (bez wiodącego 0x lub 0X) z użyciem liter abedef dla 0x i ABCDEF dla 0X. |
u |
int |
liczby dziesiętnej bez znaku. |
c |
int |
pojedynczego znaku po przekształceniu do typu unsigned char. |
s |
char * |
Znaki tekstu są wypisywane aż do napotkania znaku ’\0! lub liczba wypisanych znaków osiągnie wskazaną precyzję. |
f |
double |
liczby dziesiętnej [-]nunm.ddd, gdzie liczbę cyfr d określa precyzja. Domyślną precyzją jest 6; przy precyzji 0 opuszcza się kropkę dziesiętną. |
e. E |
double |
liczby dziesiętnej [~\m.dddddde±xx lub [-]m.ddddddE±xx, gdzie liczbę cyfr d określa precyzja. Domyślną precyzją jest 6; przy precyzji 0 opuszcza się kropkę dziesiętną. |
g.G |
double |
Jeśli wykładnik potęgi jest mniejszy niż -4 lub większy lub równy precyzji, to stosuje się specyfikację %e lub %E; w przeciwnym przypadku %f. Nie wypisuje się nie znaczących zer i zbędnej kropki dziesiętnej. |
P |
void * |
wskaźnika (reprezentacja zależy od implementacji). |
n |
int * |
Liczbę dotychczas wypisanych znaków w tym wywołaniu funkcji printf zapisuje się do odpowiedniego argumentu. Nie ma żadnego przekształcenia argumentu. |
% |
Nie ma żadnego przekształcania argumentu - zostanie wypisany znak %. |
vprintf(const char *format, va_list arg) vfprintf(FILE *stream, const char *format, va Jist arg) vsprintf(char *s, const char *format, va_list arg)
Funkcje vprintf, vfprintf i vsprintf działają tak samo, jak odpowiednie funkcje printf z tym, że zamiast listy argumentów o zmiennej długości podaje się argument arg, który został zainicjowany wywołaniem makra va_start i, być może, wywołaniami va_arg (patrz: rozważania nad <stdarg.h> w p. B7).
Funkcje z rodziny scanf realizują formatowane przekształcanie danych wejściowych.
int fscanf(FILE *stream, const char *format, ...)
Funkcja fscanf czyta strumień stream i pod kontrolą argumentu format przypisuje przekształcone wartości kolejnym argumentom. Każdy z tych argumentów musi być
I powered by
B1 WEJŚCIE I WYJŚCIE: NAGŁÓWEK <STDIO.H> ___I_.--■
wskaźnikiem. Funkcja kończy działanie, gdy zinterpretuje cały formSTTTCETR^c^^™ zwraca EOF, jeśli przed jakimkolwiek przekształceniem napotka koniec pliku lub nastąpi jakiś błąd; w przeciwnym przypadku zwraca liczbę przekształconych i przypisanych danych wejściowych.
Format zwykle zawiera specyfikacje przekształceń, które sterują interpretacją wejściowego ciągu znaków. W formacie mogą wystąpić:
• Odstępy i tabulacje, które są ignorowane;
• Zwykłe znaki (nie %) spodziewane jako następne „czarne” znaki w strumieniu wejściowym;
• Specyfikacje przekształceń złożone ze znaku %, opcjonalnego znaku * wstrzymującego przypisanie, opcjonalnej liczby określającej maksymalny rozmiar pola, opcjonalnej litery h, I lub L określającej rozmiar odpowiedniego argumentu oraz ze znaku przekształcenia.
Specyfikacja przekształcenia steruje przekształceniem kolejnego pola wejściowego. Zwykle wynik jest przypisywany zmiennej wskazanej odpowiednim argumentem.
Jeśli jednak przypisanie ma być wstrzymane, jak np. w %*s, to dane pole wejściowe będzie po prostu pominięte - nie wykona się żadne przypisanie. Pole wejściowe jest zdefiniowane jako ciąg czarnych znaków; rozciąga się ono albo do najbliższej „białej plamy” (ciąg białych znaków), albo - jeśli podano rozmiar pola - na odległość wskazaną tym rozmiarem. Wynika z tego, że funkcja scanf w poszukiwaniu swoich pól będzie przekraczać granice wierszy, ponieważ znak nowego wiersza jest białym znakiem. (Do białych znaków należą: znak odstępu, tabulacji, nowego wiersza, powrotu karetki, tabulacji pionowej i znak nowej strony.)
Znak przekształcenia określa sposób interpretacji najbliższego pola wejściowego. Odpowiedni argument musi być wskaźnikiem. Dozwolone znaki przekształcenia przedstawiono w tabl. B-2.
Znaki przekształcenia d, i, n, o, u i x można poprzedzić literą h, jeśli argument jest wskaźnikiem do obiektów typu short, a nie int, lub literą I, jeśli argument jest wskaźnikiem do obiektów typu long. Znaki przekształcenia e, f i g mogą być poprzedzone literą I, jeśli na liście argumentów znajduje się wskaźnik do obiektów typu double, a nie float, lub literą L dla typu long double.
int scanf(const char *format, ...)
Wywołanie scanf(...) jest równoważne z wywołaniem fscanf(stdin,...). int sscanf(char *s, const char *format, ...)
Funkcja sscanf odpowiada funkcji scanf z tym. że wejściowe znaki są pobierane z tablicy znakowej s.
327