ANSI C 2

ANSI C 2



7 WEJŚCIE I WYJŚCIE_______-

kretnej maszynie, programom z nich korzystającym oszczędzono wiedzy o dostępnym zbiorze znaków.

Ćwiczenie 7.1. Napisz program, który przekształca wielkie litery na małe lub małe litery na wielkie w zależności od tego, z jaką nazwą został wywołany; nazwa ta figuruje w argv[0].


Formatowane wyjście - funkcja printf

Wyjściowa funkcja printf tłumaczy wewnętrzne wartości na znaki. W poprzednich rozdziałach stosowaliśmy ją nieformalnie. Opis, który tu przedstawiamy, wyczerpuje najbardziej typowe zastosowania, ale nie jest kompletny - taki opis znajdziesz w dodatku B.

#    • *

int printf(char *format, argl, arg2 ...)

Funkcja printf pod nadzorem argumentu format przekształca, formatuje i wypisuje swoje argumenty do standardowego wyjścia. Jej wartością jest liczba wypisanych znaków.

O    .    .    ' !

Format zawiera obiekty dwojakiego rodzaju: zwykłe znaki, które są kopiowane do strumienia wyjściowego, oraz specyfikacje przekształceń, z których każda wskazuje sposób przekształcenia i wypisania kolejnego argumentu funkcji printf. Każdą specyfikację przekształcenia rozpoczyna znak %, a kończy znak charakterystyczny dla tego przekształcenia. Między znakiem % i znakiem przekształcenia mogą - w następującej kolejności - wystąpić:

•    Minus, zlecający dosunięcie przekształconego argumentu do lewego krańca jego

pola.    I

•    Liczba określająca minimalny rozmiar pola. Przekształcony argument będzie wpi- sany do pola o co najmniej takim rozmiarze. Jeśli trzeba, pole zostanie uzupełnione do pełnego rozmiaru z lewej strony (lub z prawej, jeśli żądano dosunięcia w lewo).

•    Kropka, oddzielająca rozmiar pola od precyzji.

•    Liczba określająca precyzję, tj. maksymalną liczbę znaków dla tekstu, liczbę cyfr

po kropce dziesiętnej dla wartości zmiennopozycyjnej lub minimalną liczbę cyfr ! dla wartości całkowitej.    '

   Jedna z liter: h - jeśli argument całkowity należy wypisać jako short, lub I (litera el) - jeśli jako long.

Znaki przekształcenia figurują w tabl. 7.1. Działanie funkcji nie jest określone, jeżeli znak następujący po % nie jest znakiem przekształcenia.

I Ml Siol

powered by

7.2 FORMATOWANE WYJŚCIE - FUNKCJA PRINTF___fi-^;.

Tablica 7.1. Podstawowe przekształcenia funkcji printf

Znak

Typ argumentu

Dana wyjściowa

d.i

int

liczba dziesiętna

0

int

liczba ósemkowa bez znaku (bez wiodącego zera)

x, X

int

liczba szesnastkowa bez znaku (bez wiodących 0x lub 0X) z literami abedef lub ABCDEF dla 10, ..., 15

u

int

liczba dziesiętna bez znaku

c

int

jeden znak

s

char *

ciąg znaków wypisywany do napotkania ’\0' lub wyczerpania liczby znaków określonej przez precyzję

f

double

[-]m.dddddd. gdzie liczbę cyfr d określa precyzja (domyśl-nie 6)

e, E

double

[-]m.dddddde±xx lub [-]m.ddddddE±xx, gdzie liczbę cyfr d określa precyzja (domyślnie 6)

g.G

double

wypisana w formacie %e lub %E, jeśli wykładnik jest mniejszy niż -4 albo większy lub równy precyzji; w przeciwnym przypadku wypisana w formacie %f; nic wypisuje się nieznaczących zer i kończącej kropki dziesiętnej

P

void *

wskaźnik (postać zależna od implementacji)

%

nie ma przekształcenia argumentu; wypisany znak %

Szerokość pola lub precyzję można w specyfikacji zastąpić znakiem *, co oznacza, że żądaną liczbę należy obliczyć przekształcając kolejny argument funkcji (argument musi być typu int). Na przykład, wypisanie co najwyżej max znaków z s wygląda tak:

printf(”%.*s”, max, s);

Większość przekształceń formatujących prezentowaliśmy już w poprzednich rozdziałach. Jednym z wyjątków jest precyzja odnosząca się do tekstów. Następujące zestawienie pokazuje działanie różnych specyfikacji podczas wypisywania tekstu „ahoj, przygodo” (14 znaków). Aby można było ocenić rozmiary pól, otoczyliśmy je dwukropkami.

:%s:

:ahoj, przygodo:

:%10s:

:ahoj, przygodo:

:%.10s:

:ahoj, przy:

:%~1 Os:

:ahoj, przygodo:

:%.20s:

:ahoj, przygodo:

:%-20s:

:ahoj, przygodo

:%20.10s:

: ahoj,

20.10s:

:ahoj, przy

Uwaga: funkcja printf używa swojego pierwszego argumentu do określenia liczby 1 typów pozostałych argumentów. Jeżeli nie podałeś wystarczającej liczby argumentów lub są one złego typu, to funkcja będzie zdezorientowana, a Ty otrzymasz błędne wyniki. Powinieneś więc zdawać sobie sprawę z różnicy między tymi wywołaniami:

207


Wyszukiwarka

Podobne podstrony:
ANSI C 6 7 WEJŚCIE I WYJŚCIE_______ Ćwiczenie 7.5. Napisz na nowo program kalkulatora przyrostkowe
ANSI C 1 7 WEJŚCIE I WYJŚCIE Najprostszym mechanizmem wejścia jest czytanie po jednym znaku ze sta
ANSI C 3 7 WEJŚCIE I WYJŚCIE ____ ________ printf(s);    /* ŹLE, jeśli w s występuj
ANSI C 5 7 WEJŚCIE I WYJŚCIE______ tabulacji, znak nowego wiersza, znak powrotu karetki, znak tabu
ANSI C 7 7 WEJŚCIE I WYJŚCIE ^ OBSŁUGA BŁĘDÓW - PLIK STDERR I FUNKCJA EXIT Funkcje getchar i putch
ANSI C 8 7 WEJŚCIE I WYJŚCIE #include <stdio.h> /* cat: sklej zawartość plików, wersja 2 */
ANSI C 9 7 WEJŚCIE I WYJŚCIE Aby wykazać, że nie ma nic magicznego w takich funkcjach, jak fgets i
ANSI C 0 7 WEJŚCIE I WYJŚCIE 7.8.2 Badanie klasy znaków i ich przekształcenia Wiele funkcji ze sta
ANSI C 1 7 WEJŚCIE I WYJŚCIE W punkcie 8.7 pokażemy taką realizację dystrybutora pamięci podobnego
A8 48 Anatomia PC adresów wejścia-wyjścia rozpoznaje tylko 1024 z nich - są to porty ulokowane w za
MaszynaW 12 2. Maszyna EW 28 _ 2.3.1.    Opis układu wejścia-wyjścia Dla rzeczywistej
Rozdział 1. • Proste operacje wejścia-wyjścia 15 ZADANIE 1.6 Napisz program, który oblicza resztę z
Rozdział 1. • Proste operacje wejścia-wyjścia 17 Rezultat działania programu można zobaczyć na rysun
cz5 9 Programowanie wej, makro _SFR_IO_ADDR dokonuje jego zamiany na przestrzeń wejścia-wyjścia - cz
Operacje wejścia-wyjścia Wykonanie programu przez komputer polega w zasadzie na wprowadzeniu odpowie
Operacje wejścia-wyjścia Do obsługi fizycznych zbiorów danych w programie paskalowym stosuje się , k

więcej podobnych podstron