ANSI C 4

ANSI C 4



case ’s’:

for (sval = va_arg(ap, char *); *sval; sval++) putchar(*sval); break; default:

putchar(*p);

break;

}

}

va_end(ap); /* po pracy wyczyść co trzeba */

}

Ćwiczenie 7.3. Uzupełnij minprintf tak, aby obsługiwała więcej możliwości funkcji printf.


Formatowane wejście - funkcja scanf

Funkcja scanf jest wejściowym odpowiednikiem funkcji printf - umożliwia większość tych samych przekształceń, lecz w przeciwnym kierunku.

int scanf(char * format, ...)

Funkcja scanf wczytuje znaki ze standardowego wejścia, interpretuje je zgodnie ze specyfikacjami zawartymi w argumencie format i zapamiętuje wyniki w miejscach określonych przez pozostałe argumenty. Argument formatujący będzie opisany dalej; pozostałe argumenty, z których każdy musi być wskaźnikiem, wskazują, gdzie należy przekazać odpowiednio przekształcone dane wejściowe. Tak jak w przypadku printf, niniejszy opis jest tylko podsumowaniem najczęściej używanych możliwości funkcji, a nie ich wyczerpująco przedstawioną listą.

Funkcja scanf zatrzyma się wtedy, kiedy zinterpretuje wszystkie znaki formatu lub gdy pewna dana nie pasuje do żądanej specyfikacji przekształcenia. Jej wartością jest liczba szczęśliwie wczytanych i przypisanych danych wejściowych. Z wartości tej można skorzystać przy ustalaniu liczby znalezionych danych. Po napotkaniu końca pliku funkcja zwraca EOF; podkreślamy to, gdyż ta wartość jest różna od 0 oznaczającego, że najbliższy znak wejściowy nie pasuje do pierwszej specyfikacji przekształcenia. Kolejne wywołanie scanf wznawia szukanie bezpośrednio za ostatnim już wczytanym znakiem.

Mamy także funkcję sscanf, która zamiast ze standardowego wejścia czyta znaki ze wskazanej tablicy:

int sscanffchar *string, char *format, argl, arg2, ...)

7.4 FORMATOWANE WEJŚCIE - FUNKCJA SCANF


Funkcja ta interpretuje tekst zawarty w tablicy string zgodnie zTormatem zadanym w argumencie format i wynikowe wartości umieszcza w miejscach wskazanych przez pozostałe argumenty argl% arg2 itp. Te argumenty muszą być wskaźnikami.

Format zawiera zwykle specyfikacje przekształceń używane do sterowania przekształcaniem danych wejściowych. W formacie mogą wystąpić:

•    Odstępy oraz znaki tabulacji - są ignorowane.

•    Zwykłe czarne znaki (ale nie %), które spodziewamy się zastać 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, jednego z opcjonalnych znaków h, I lub L ustalających rozmiar wyniku oraz ze znaku przekształcenia.

Specyfikacja przekszałcenia steruje przekształceniem następnego pola wejściowego. Normalnie wynik jest wstawiany do zmiennej wskazanej odpowiednim argumentem. Jeśli jednak przypisanie ma być wstrzymane (znak *), to dane pole wejściowe pomija się - nie będzie żadnego przypisania. Polem wejściowym jest z definicji ciąg czarnych znaków; rozciąga się ono albo do najbliższej „białej plamy” (ciągu białych znaków), albo - jeśli podano rozmiar pola - na odległość wskazaną tym rozmiarem. Wynika z tego, że funkcja scanf w poszukiwaniu pól będzie przekraczać granice wierszy, ponieważ znak nowego wiersza jest białym znakiem. (Białymi znakami są: odstęp, znak

Tablica 7.2. Podstawowe przekształcenia funkcji scanf

Znak

Dana wejściowa

Typ argumentu

d

liczba całkowita dziesiętna

int *

i

liczba całkowita; może wystąpić w postaci ósemkowej (z wiodącym 0) lub szesnastkowej (z wiodącymi 0x lub 0X)

int *

0

liczba całkowita w postaci ósemkowej (razem z wiodącym 0 lub bez)

int *

u

liczba całkowita dziesiętna bez znaku

unsigned int *

X

liczba całkowita w postaci szesnastkowej (z wiodącymi 0x lub 0X, albo bez)

int *

c

znaki; następne znaki z wejścia (domyślnie l) umieszcza się we wskazanej tablicy; nie obowiązuje zwykła zasada pomijania białych plam; aby przeczytać najbliższy czarny znak, należy użyć %1s

char *

s

tekst (ale nie napis, tj. ciąg znaków występujący bez znaków cudzysłowu); argument powinien wskazywać na tablicę znakową o rozmiarze wystarczającym do przyjęcia tekstu wraz z dodanym na końcu znakiem ’\0’

char *

«. f.g

liczba zmiennopozycyjna z opcjonalnym znakiem, opcjonalną kropką dziesiętną i opcjonalnym wykładnikiem

float *

%

literalnie znak %; nie będzie żadnego przypisania

211


Wyszukiwarka

Podobne podstrony:
ANSI C 4 5 WSKAŹNIKI I TABLICE int gettoken (void); int tokentype; char token[MAXTOKEN]; 
ANSI C 4 2 TYPY, OPERATORY I WYRAŻENIA__.______ n = 0; for (i = 0; s[i] >= ’0’ && s[i]
ANSI C 8 5 WSKAŹNIKI I TABLICE ____________— for (i = 1; i < argc; i-H-) printf(,,%s%s”, argv[i
APC 13 08 25 08 4 3d ♦ The past simple is used for actions which happened immediately one
APC 13 09 07 18 4 3d ♦ wish/if only + would This structure is used: a)    for a
00250 y379010282bfa1dc1edfcd76e766f6b 252 Yander Wiel Figurę 4. Plots to determine the action limit
IMGu12 Błota. Siedzibą Spóllrijest miej^t Białe §4 2 IŚlka    ^“^zypospolitej Polskie
jądro strona 1 i **0* «mł MMW I .4,4. ,♦***:<%*<i .. Męk tom«w* 4 h(.VA» % K<w inni h*
d4 T“ ■<■■ r ■ ■ ■ — —•— ’ 1 — ~ ^ - _L_ -
File and directory references are case sensitive. For example, the following two paths specify diffe
20426 tv8024 (8) * 4 ■4- 4 4- 1 «: 4 % 4 4 4 i i * 4 4 iii i ♦ 4 4 fc 4 4 i Mi 4 Ł 1 ii 4 4
gera4 ><0“ JtVvU. W*/i 0 jWuklcuLu St-rfoLU^ jU^oLmpfcd Wu5u> p/-OCco i u) c.U<flUen.će
S5008120 38 4~R4 “    1 Sprawdzenie: Według I prawa Kirchhoffa dla węzłów A i B I
41437 t496t24 (2) :$ 4 4 4 i •4 4 i 14 ♦ * 4 1 i* * *
45105 XXV lat PRL kop 3 M3na" ddd “ DOJ r*8*1V Va!*P Wł»*NV«Y) OC»l¥. lOAtOCOi

więcej podobnych podstron