Рядок форматування функцій введення

Описаний нижче рядок формату використовується в багатьох функціях введення даних (scanf, fscanf, sscanf та ін.). Рядок може включати три види елементів:

  • символи пробілів (пробіл ” “, табуляцію “\t”, символ нового рядка “\n”
  • не пробільні друковані символи (крім %)
  • специфікації формату

Якщо в рядку зустрівся пробільний символ, то з цього моменту пробільні символи до першого не пробільного символу зчитуються з вхідного потоку, але не беруть участь у привласненні змінних значень (ігноруються).

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

Специфікації формату починаються з символу % і мають вигляд:
%, [*] [width] [FIN] [h|l|L] type

Усі символи специфікації записуються без пробілів між ними.

Єдино обов’язковим елементом специфікації є type – символ, що вказує на те, як трактуватиметься аргумент, що вводиться. Інші необов’язкові елементи задають параметри форматування:

ЗначенняОпис
[*]Заборона занесення в пам’ять поля, що читається. Поле сканується, але його значення не надається аргументу зі списку.
[width]Ширина поля – максимальна кількість символів, що читаються. Реально може бути прочитано менше символів, якщо у вхідному потоці раніше зустрінеться символ пробілу або символ, який не може бути перетворений відповідно до заданого формату.
[F|N]Модифікатори, які змінюють розмір аргументу за замовчанням:
Nближній вказівник (near)
Fдальній вказівник (far)
[h|l|L]Модифікатори, які змінюють розмір аргументу за замовчанням:
short int
llongint, якщо type відповідає цілій кількості, або double, якщо type відповідає дійсному числу
Llong double

Нижче наведено можливі значення type.

СимволОчікуваний тип данихТип аргументу
dцілийвказівник на int(int*arg)
Dцілийвказівник на long(long*arg)
e, Eдійснийвказівник на float(float*arg)
fдійснийвказівник на float(float*arg)
g, Gдійснийвказівник на float(float*arg)
oвісімковий цілийвказівник на int(int*arg)
Oвісімковий цілийвказівник на long(long*arg)
iдесятковий , вісімковий або шістнацятковий цілийвказівник на int(int*arg)
Iдесятковий , вісімковий або шістнацятковий цілийвказівник на long(long*arg)
uдесятковий цілій без знакувказівник на unsigned int (unsigned int *arg)
Uдесятковий цілій без знакувказівник на unsigned long (unsigned long *arg)
xшістнацятковий цілийвказівник на int(int*arg)
Xшістнацятковий цілийвказівник на int(int*arg)
Символи
sрядок символіввказівник на масив символів (chararg[])
cсимволвказівник на char(char*arg) або якщо задана ширина поля (наприклад, % 5с), то на масив символів розміром W(chararg[W])
%символ %не перетворюється
Вказівники
nвказівник на int(int*arg)у комірку пам’яті, на яку вказує аргумент, заноситься кількість успішно прочитаних до цього моменту символів
Pшістнацятковий формат: YYYY:ZZZZили ZZZZпокажчик на об’єкт (far* или near*)

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *