Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

osn_progr_final

.pdf
Скачиваний:
43
Добавлен:
12.02.2016
Размер:
3.27 Mб
Скачать

 

пки і не дозволяє відсікати ведучі

цифри.

 

нулі. Прапорець # ігнорується

Ведучі нулі від-

 

при його використанні у форма-

сікаються.

 

тах c, d, і, u, s.

 

 

 

 

Width

Width – це рядок цифр, що задає мінімальну ширину поля [width]. Перетворене число буде надруковано в поле принаймні заданої ширини, а якщо необхідно, то й у більш широке. Якщо перетворений аргумент має менше символів, ніж зазначена ширина поля, то він буде доповнений ліворуч (чи праворуч, якщо було зазначене вирівнювання по лівому краю) символами, що заповнюють (заповнюючі), до цієї ширини. Символом, що заповнює, звичайно є пропуск. А якщо ширина поля вказується з лідируючим нулем, то цим символом буде нуль (лідируючий нуль у даному випадку не означає вісімкової основи). Ця специфікація не задає відсікання символів, якщо значення перевищує задану ширину.

Рrecision

Рядок цифр [.precision], що вказує максимальну кількість символів рядка, що повинні бути надруковані, чи кількість цифр, що друкуються праворуч від десяткової крапки для змінних типу float чи double. На відміну від попередньої специфікації, дана вимагає відсікання або округлення. Інформація про значення precision для різних специфікацій перетворень подається в таблиці:

411

Специфікація

Значення

 

 

 

За замовчуванням

перетворення

 

 

 

 

 

 

 

 

 

d

Precision

визначає

міні-

Якщо precision дорів-

і

мальну

кількість

цифр,

нює 0, пропущена, чи

u

що

друкуються.

Якщо

якщо крапка вказана

o

кількість цифр у

 

без цифр, що йдуть за

x

аргументі

менша,

ніж

нею, precision вста-

X

розмір precision, ліворуч

новлюється рівною 1.

 

перед

виведеним

зна-

 

 

 

 

ченням

додаються

нулі.

 

 

 

 

Якщо кількість цифр не

 

 

 

 

перевершує

розмір

 

 

 

 

precision, значення не

 

 

 

 

відсікається.

 

 

 

 

 

e

Precision

визначає кіль-

Precision за замовчу-

E

кість цифр, що друку-

ванням дорівнює 6;

f

ються

після

десяткової

якщо вона дорівнює 0

 

крапки. Остання цифра,

чи

перед

нею

 

що друкується, округ-

з’являється крапка (.)

 

люється.

 

 

 

без цифр, що сліду-

 

 

 

 

 

 

 

ють за нею, то десят-

 

 

 

 

 

 

 

кова крапка не дру-

 

 

 

 

 

 

 

кується.

 

g

Precision

визначає

мак-

Друкуються всі сим-

G

симальну кількість сим-

воли.

 

 

 

волів, що друкуються.

 

 

 

c

Не

відбувається ніякої

Друк символу.

 

 

дії.

 

 

 

 

 

 

 

 

s

Precision

визначає

мак-

Друк

символів,

доки

 

симальну

кількісь

сим-

не зустрінеться нуль-

 

волів, що друкуються

символ.

 

 

Символи,

що

виходять

 

 

 

 

за межі precision, не дру-

 

 

 

 

куються.

 

 

 

 

 

 

Префікси {F:N:h:I}

F – використовується у малій моделі пам’яті для друку farзначення.

412

N – використовується у середній, великій та huge-моделях для near-значень.

F і N можуть бути використані тільки з типами символів s і p, оскільки вони доречні тільки з аргументами-вказівниками.

h – використовується як префікс із цілими типами d, і, o, x, X для позначення, що аргумент є short int.

l – використовується як префікс із типами d, і, o, x, X для позначення, що аргумент є long int. Символ l використовується також як префікс із типами e, E, f, g, G для вказівки, що аргумент є швидше double ніж float.

Типи специфікацій формату:

Символ

Тип

аргу-

Формат

 

специ-

менту

 

 

 

фікації

 

 

 

 

 

d

цілий

 

цілочисельний десятковий знаковий.

і

цілий

 

цілочисельний десятковий знаковий.

u

цілий

 

цілочисельний десятковий беззнаковий.

o

цілий

 

цілочисельний вісімковий беззнаковий.

x

цілий

 

цілочисельний шістнадцятковий

беззна-

 

 

 

 

ковий, що використовує "abcdef".

 

X

цілий

 

цілочисельний шістнадцятковий

беззна-

 

 

 

 

ковий , що використовує "ABCDEF".

f

з

плаваю-

знакове значення, що має форму [-

 

чою

крап-

]dddd.dddd, де dddd – одна чи більше де-

 

кою

 

сяткових цифр. Кількість цифр перед де-

 

 

 

 

сятковою крапкою залежить від величи-

 

 

 

 

ни числа, а кількість цифр після десятко-

 

 

 

 

вої крапки залежить від необхідної точ-

 

 

 

 

ності.

 

e

з

плаваю-

знакове значення, що має форму [-

 

чою

крап-

]d.dddde[sign]ddd, де d – десяткова циф-

 

кою

 

ра, dddd – одна чи більше десяткових

 

 

 

 

цифр, dddрівно три десяткових цифри,

 

 

 

 

sign- "+", або "-".

 

E

з

плаваю-

аналогічне “е”, за винятком того, що

 

чою

крап-

друкується символ “Е”замість “е”.

 

 

кою

 

 

 

g

з

плаваю-

знакове значення, друкується у форматі

 

чою

крап-

“e” чи “f”, який є більш компактним для

413

 

кою

відповідного значення та точності. Фор-

 

 

мат "e" використовується, тільки коли

 

 

значення експоненти менше -4 чи біль-

 

 

ше, ніж precision.

 

 

Ведучі нулі відсікаються і десяткова

 

 

крапка з”являється тоді, коли за нею слі-

 

 

дує одна чи декілька цифр.

G

з плаваю-

аналогічне формату "g", за виключенням

 

чою крап-

того, що замість "e" виводиться експоне-

 

кою

нта "E" (якщо вона потрібна).

C

символь-

окремий символ.

 

ний

 

S

рядковий

символи друкуються до першого нульо-

 

 

вого символу ‘\0’ чи до досягнення

 

 

precision.

N

вказівник

кількість символів, успішно записаних в

 

на цілий

потік. Це значення зберігається в цілому,

 

 

адреса якого передається як аргумент.

p

far-

друк адреси, що вказується аргументом,

 

вказівник

у формі xxxx:yyyy, де xxxx є сегментом,

 

 

yyyy є зміщенням, цифри x і y є шістна-

 

 

дцятковими цифрами верхнього регістра

 

 

(upper-case). %Np друкує тільки адресу

 

 

зміщення yyyy. Оскільки %p визначає

 

 

вказівник на far-значення, аргументи

 

 

можуть бути перетворені до far у малій

 

 

моделі пам’яті

Якщо за символом знака відсотка (%) слідує символ, що не задає тип формату, то цей символ копіюється в потік stdout. Наприклад, для виводу символу знака відсотка використовується комбінація %%.

Ця функція повертає кількість надрукованих символів.

Див. також fprintf, scanf, sprintf, vfprintf, vprintf.

PUTC-PUTCHAR <stdio.h> int putc (c, stream); int c;

FILE *stream;

Записує символ с у біжучу позицію потоку stream. int putchar(c);

414

int c;

Анолог putc(c, stdout).

Повертають записаний символ. У випадку помилки повертається значення EOF.

PUTCH <conio.h> void putch(c) int c;

Записує символ c прямо на консоль. Значення, що повертається, немає.

Див.також cprintf, getch, getche.

PUTENV <stdlib.h>

int putenv(envstring); char *envstring;

Утворює нові змінні оточення чи модифікує існуючі. Аргумент envstring повинен бути вказівником на рядок у формі:

varname = string,

де varname – ім’я змінної оточення , string – значення цієї змінної. Якщо varname існує, то значення модифікується, інакше – утворюється нова змінна оточення.

Повертає 0 у випадку успіху чи -1, якщо виникла помилка. Див. також getenv.

PUTS <stdio.h>

int puts (string); char *string;

Записує рядок string у стандартний потік виводу stdout, замінюючи у вихідному потоці нульовий символ закінчення рядка ‘\0’ символом нового рядка ‘\n’.

Повертає останній записаний символ, котрим зазвичай є символ нового рядка ‘\n’. Значення EOF свідчить про помилку.

Див. також fputs, gets.

PUTW <stdio.h>

int putw(binint, stream);

int binint; //виведене двійкове ціле

FILE *stream

Записує бінарне значення типу int у біжучу позицію по-

току stream.

Повертає записане значення або EOF у випадку помилки. Див. також getw.

415

QSORT <search.h>

void gsort(base,num, width, compare); char *base;

unsigned num, width;

int (*compare) (const void *, const void *);

Виконує алгоритм швидкого сортування масиву з num елементів, кожен елемент якого розміром у width байт. Аргумент base є вказівником на масив, який потрібно відсортувати. Функція qsort перезаписує цей масив з відсортованими елементами. Аргумент compare є вказівником на функцію, що розробляється користувачем. Ця функція порівнює два елементи масиву і повертає значення, що визначає відношення між елементами:

ЗНАЧЕННЯ

ЗМІСТ

 

менше 0

element 1 менше element 2;

0

element 1

дорівнює element 2;

більше 0

element 1

більше element 2.

Значення, що повертається немає.

Див. також bsearch, lsearch.

RAND <stdlib.h> int rand();

Повертає псевдовипадкове число в інтервалі від 0 до

32767. READ <io.h>

int read(handle, buffer,count) int handle;

char *buffer; //пам’ять для збереження даних unsigned int count;//максимальна кількість байт

Читає count байт з файлу, зв’язаного з дескриптором handle у буфер buffer. Операція читання починаються з біжучої позиції файлового покажчика. Після виконання операції читання покажчик встановлюється на наступний непрочитаний символ.

Повертає кількість дійсно прочитаних байт, що може бути меншою, ніж count. Якщо повертається значення 0, це свідчить про спробу читання кінця файлу, -1 – про помилкову ситуацію.

Див.також creat, fread, open, write.

REALLOC <malloc.h>

416

char *realloc(ptr,size);

char *ptr; //вказівник на раніше виділений блок пам’яті unsigned size; //новий розмір у байтах

Змінює розмір раніше виділеної області пам’яті. Аргумент ptr вказує на початок області. Аргумент size задає новий розмір області в байтах. Вміст області не змінюється.

Повертає char-вказівник на перевиділену область пам’яті або NULL, якщо пам’яті недостатньо.

Див. також caloc, free, halloc, malloc.

REMOVE <io.h>, <stdio.h> int remove(pathname);

char *pathname; //path-ім’я файлу, що видаляється Видаляє файл, визначений pathname.

Повертає 0, якщо файл успішно видалений. Якщо виникла помилка, повертається -1.

RENAME <io.h>

int rename (oldname,newname);

char *oldname; // вказівник на старе ім’я char *newname; //вказівник на нове ім’я

Перейменовує файл чи папку. Oldname повинен містити path-ім’я існуючого файлу чи папки. Newname – нове ім’я. Повертає 0 у випадку успіху і ненульове значення у випадку помилки.

Див. також create, fopen, open.

REWIND <stdio.h>

void rewind(stream); FILE *stream;

Переміщає файловий покажчик, зв’язаний з потоком stream, на початок файлу. Виклик функції rewind еквівалент-

ний fseek(stream, OL, SEEK_SET); Див. також fseek, ftell.

RMDIR <direct.h>

int rmdir(pathname); char *pathname;

Видаляє папку, задану за допомогою pathname. Повертає 0 у випадку успіху і -1 у випадку помилки.

RMTMP <stdio.h> int rmtmp;

417

Видаляє всі тимчасові файли біжучої папки, створені за допомогою tmpfile.

Повертає кількість видалених файлів.

Див. також flushall, tmpfile, tmpnam.

SBRK <malloc.h>

char *sbrk(incr);

int incr; //кількість байт, що додаються чи віднімаються Перевстановлює значення розриву для викликаючого

процесу. Значенням розриву є адреса першого байта виділеної пам’яті. Функція sbrk додає incr байт до значення розриву; відповідно до цього встановлюється розмір виділеної пам’яті.

Повертає старе значення розриву. У випадку помилки повертається -1.

Див. також calloc, free, malloc, realloc.

SCANF <stdio.h>

int scanf(format-string[[, argument...]]); char *format-string //форматний рядок

Функція scanf читає дані із стандартного потоку stdin і записує у змінні, вказані як аргументи arguments. Кожен аргумент повинен бути вказівником, що відповідає типу, заданому у рядку формату. Рядок формату керує перетвореннями полів введення. Цей рядок може містити наступні символи:

"пропускові" символи, тобто символ пропуску ‘ ‘, табуляції ‘\t’, нового рядка ‘\n’. Для функції scanf символами пропуску визначається зчитування але без запам’ятовування. Тобто пропускові символи ігноруються аж до першого символу, що не є пропусковим.

довільні символи, що не є пропусковими чи символом знака відсотка %. Тоді по цьому символу функція scanf здійснює зчитування без запам’ятовування відповідних символів керування. Ці символи повинні співпадати з відповідними символами вхідного потоку. Якщо наступний символ у <stdin> не відповідає символам керування, то scanf закінчує свою роботу.

cпецифікацію формату, позначеного знаком %. У цьому випадку scanf читає і перетворює введені символи до значень заданого типу, причому значення визначаються відповідними

418

аргументами зі списку аргументів. Якщо значень більше, ніж передбачає список аргументів, то останні ігноруються. Специфікація формату має наступну форму:

%[*][flags][wigth][.precision][{F:N:h:I}]type.

Див. функцію printf().

Якщо у специфікації формату зазначено символ *, то відбувається зчитування без присвоєння, тобто поле вводу просто пропускається і ніякого присвоєння не відбувається. Поле введення визначається як рядок символів, що відмінні від символів простих пропусків; воно продовжується або до наступного символу пропуску, або поки не буде вичерпана ширина поля, якщо вона зазначена. Звідси випливає, що при пошуку потрібного їй вводу, функція scanf буде перетинати границі рядків, оскільки символ нового рядка входить у число пропускових.

Символ

Тип вводу, що перед-

Тип аргументу

 

 

бачається

 

 

 

d

десятковий цілий

вказівник на int.

D

десятковий цілий

вказівник

на

 

 

 

 

long.

 

o

вісімковий цілий

вказівник на int.

O

вісімковий цілий

вказівник

на

 

 

 

 

long.

 

x

шістнадцятковий цілий

вказівник на int.

X

шістнадцятковий цілий

вказівник

на

 

 

 

 

long.

 

і

десятковий,

вісімковий

вказівник на int.

 

чи

шістнадцятковий

 

 

 

цілий

 

 

 

 

I

десятковий,

вісімковий

Вказівник

на

 

чи

шістнадцятковий

long.

 

 

цілий

 

 

 

 

u

беззнаковий

десятко-

Вказівник

на

 

вий цілий

 

unsigned.

 

U

беззнаковий

десятко-

Вказівник

на

 

вий цілий

 

unsigned.

 

419

e

значення з плаваючою

Вказівник

на

f

крапкою, що має нео-

float.

 

 

 

 

бов’язковий

 

знак

 

 

 

 

 

("+","-"), одну чи біль-

 

 

 

 

 

ше десяткову

цифру,

 

 

 

 

 

десяткову крапку і экс-

 

 

 

 

 

поненту ("е", "Е"), що

 

 

 

 

 

записується за

знако-

 

 

 

 

 

вим цілим значенням.

 

 

 

 

с

символьний.

Символи

вказівник

 

на

 

пропуску табуляції чи

char.

 

 

 

 

нового

рядка

врахову-

 

 

 

 

 

ються.

Для зчитування

 

 

 

 

 

наступного

символу,

 

 

 

 

 

що не є пропусковим,

 

 

 

 

 

використовується ком-

 

 

 

 

 

бінація %1c.

 

 

 

 

 

 

s

Рядковий

 

 

Вказівник

на

 

 

 

 

 

символьний ма-

 

 

 

 

 

сив

достатньо

 

 

 

 

 

великий

 

щоб

 

 

 

 

 

вмістити

 

поле

 

 

 

 

 

разом

з

нульо-

 

 

 

 

 

вим символом.

n

читання при

введенні

вказівник на int,

 

не відбувається

 

в який

запису-

 

 

 

 

 

ється

кількість

 

 

 

 

 

успішно

 

зчита-

 

 

 

 

 

них символів з

 

 

 

 

 

потока чи буфе-

 

 

 

 

 

ра

 

 

 

p

значення у формі xxxx

Вказівник на far

 

: yyyy, де x та y є шіст-

 

 

 

 

 

надцятковими

 

цифра-

 

 

 

 

 

ми верхнього регістру.

 

 

 

 

Щоб запам’ятати рядок без нульового символу ‘\0’, застосовується специфікація %nc, де n – десяткове ціле. У цьому випадку символьний тип c визначає аргумент, що вказує на масив символів.

420

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]