функція scanf

У версії C99 до параметру format застосований кваліфікатор restrict.

Таблиця 13.3. Специфікації формату функції scanf ()

Читає значення з плаваючою точкою (тільки C99)

Аналогічно коду% a (тільки C99)

Читає один символ

Читає десяткове ціле

Читає ціле в будь-якому форматі (десяткове, вісімкове або шістнадцяткове)

Читає число з плаваючою точкою

Аналогічно коду% e

Переглядає набір символів

Читає знак відсотка

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

Елементи вхідного потоку повинні бути розділені пробілами, табуляцією або роздільниками рядків. Такі символи, як кома, крапка з комою і т.п. розпізнаються як роздільники. Це означає, що оператор прийме значення, введені як 10 20. але відмовиться від послідовності символів 10, 20.

Символ *. стоїть після знака% і перед кодом формату, прочитає дані заданого типу, але заборонить їх присвоювання. Отже, оператор при введенні даних у вигляді 10/20 помістить значення 10 в змінну x. відкине знак ділення і привласнить значення 20 змінної у.

Команди форматування можуть містити модифікатор максимальної довжини поля. Він являє собою ціле число, яка розташовується між знаком% і кодом формату, яке обмежує кількість Новомосковскемих для всіх полів символів. Наприклад, якщо в змінну address потрібно прочитати не більше 20 символів, використовується наступний оператор.

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

Хоча прогалини, символи табуляції і роздільники рядків використовуються в якості роздільників полів, при читанні одиночного символу вони Новомосковскются подібно будь-якому іншому символу. Наприклад, якщо вхідний потік складається з символів x у. то оператор помістить символ x в змінну а. пробіл - в змінну b. а символ у - в змінну с.

Пам'ятайте, що будь-які символи керуючої рядки (включно з пробілами, символи табуляції і нового рядка), які не є специфікаціями формату, використовуються для установки відповідності і відкидання символів з вхідного потоку. Будь відповідний їм символ відкидається. Наприклад, якщо потік введення виглядає, як 10t20. оператор присвоїть змінній x значення 10, а змінної у - значення 20. Символ t відкидається, так як він присутній в керуючої рядку.

Важливо пам'ятати, що в наборі сканованих символів розрізняються великі та малі літери. Отже, щоб сканувати як прописні, так і малі літери, в наборі сканованих символів доведеться поставити їх окремо.

Модифікатори формату, додані до функції scanf () Стандартом C99

У версії C99 для використання у функції scanf () додані модифікатори формату hh. ll. j. z і t. Модифікатор hh можна застосовувати до специфікаціям d. i. о. u. x і n. Він означає, що відповідний аргумент є покажчиком на значення типу signed char або unsigned char. Модифікатор ll також можна застосовувати до специфікаціям d. i. о. u. x і n. Він означає, що відповідний аргумент є покажчиком на значення типу signed long long int або unsigned long long int.

Moдіфікaтop фopмaтa j. кoтopий пpімeняeтcя до cпeціфікaціям d. i. о. u. х і n означає, що відповідний аргумент є покажчиком на значення типу intmax_t або uintmax_t. Ці типи оголошені в заголовку і служать для зберігання цілих максимально можливої ​​розрядності.

Модифікатор формату z. який застосовується до специфікаціям d. i. о. u. х і n означає, що відповідний аргумент є покажчиком на об'єкт типу size_t. Цей тип оголошений в заголовку і служить для зберігання результату операції sizeof.

Модифікатор формату t. який застосовується до специфікаціям d. i. о. u. х і n означає, що відповідний аргумент є покажчиком на об'єкт типу ptrdiff_t. Цей тип оголошений в заголовку і служить для зберігання значення різниці між двома покажчиками.

Зовсім функції