Форматоване введення
Для форматованого введення з потоку застосовують функцію
intfscanf (FILE *stream,
constchar *format
[, address, ...] )
Ця функція повертає число полів введення тих, що відформатували і розміщених у пам'яті. При невдачі повертає EOF.
Функція fscanf розглядає вхідний потік як послідовність полів введення. Поле введення закінчується:
першим символом пропуску (але не включає його);
першим символом, який не може бути перетворений за специфіка-цією формату, зіставленій цьому полю;
(n+1)-м символом, якщо специфікація включає ширину поля в n символів.
Функція проглядає послідовність полів введення, форматує їх і розміщує за адресами – аргументами fscanf. Число адрес, специфікацій формату і полів введення повинно бути узгоджено.
Рядок формату складається з символів (' ',\t,\n), що невідображаються, символів (всі інші, окрім '%'), що відображаються, і специфікаторів формату.
Якщо fscanf зустрічає символ, що не відображається, в рядку формату, вона прочитуватиме, але не зберігатиме всі символи вхідного потоку, що не відображаються, аж до першого символу, що відображається.
Якщо fscanf зустрічає символ, що відображається, в рядку формату, вона прочитає, але не збереже відповідний символ вхідного потоку.
Специфікація формату вказує fscanf на читання, перетворення і розміщення в пам'яті одного вхідного поля.
Загальний вигляд специфікації формату:
%[*] [ширина] [модіф. розміру] [модіф. типу арг.] символ типу;
* – відміняє привласнення поля введення;
ширина – максимальне число зчитуваних символів;
модифікатор розміру – N – near, F – far;
модифікатор типу аргументу – змінює тип адресного аргументу;
символ типу – символ специфікації типу – обов'язковий елемент формату.
У таблиці 2.1 наведені інші функції введення формату із зазначенням заголовного файла і вхідного потоку.
Таблиця 2.1
Функції введення із зазначенням заголовного файлаі вхідного потоку
cprintf |
CONIO.H |
Консоль |
fprintf |
STDIO.H |
Потік |
printf |
STDIO.H |
stdout |
sprintf |
STDIO.H |
Рядок |
У табл. 2.2. подані інші функції виведення формату із зазначенням заголовного файла і вхідного потоку.
Таблиця 2.2
Функції виведення із зазначенням заголовного файлаі вхідного потоку
cscanf |
CONIO.H |
Консоль |
fscanf |
STDIO.H |
Потік |
scanf |
STDIO.H |
stdin |
sscanf |
STDIO.H |
Рядок |
Завдання до лабораторної роботи
Виконати вправи лабораторної роботи, оформивши програмний продукт у вигляді багатофайлового проекту.
Усі необхідні дані для функцій повинні передаватися їм як параметри. Використання глобальних змінних у функціях не допускається.
За допомогою текстового редактора створити файл, що містить текст, довжина якого не перевищує 1000 символів (довжина рядка не повинна перевищувати 70 символів). Ім'я файла повинне мати розширення DAT.
Варіант 1
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє кожне речення тексту;
визначає кількість речень у тексті.
Варіант 2
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє кожне слово тексту;
визначає кількість слів у тексті.
Варіант 3
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє кожне слово тексту, що закінчується на голосну букву;
визначає кількість слів у тексті, що закінчуються на голосну букву.
Варіант 4
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє кожне речення тексту в послідовності 2, 3, 1.
Варіант 5
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє кожне із слів тексту, у яких перший і останній символи співпадають;
визначає кількість слів тексту, у яких перший і останній символи співпадають.
Варіант 6
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє кожне слово тексту, що починається на голосну букву;
визначає кількість слів у тексті, що починаються на голосну букву.
Варіант 7
Написати програму, яка:
виводить текст на екран дисплея;
визначає кількість символів у найдовшому слові;
при натисненні довільної клавіші по черзі виділяє кожне слово тексту, що містить максимальну кількість символів.
Варіант 8
Написати програму, яка:
виводить текст на екран дисплея;
визначає кількість символів у найкоротшому слові;
при натисненні довільної клавіші по черзі виділяє кожне слово тексту, що містить мінімальну кількість символів.
Варіант 9
Написати програму, яка:
виводить текст на екран дисплея;
визначає в кожному реченні тексту кількість символів, відмінних від букв і пробілу;
при натисненні довільної клавіші по черзі виділяє кожне речення тексту, а у виділеній пропозиції – по черзі всі символи, відмінні від букв і пробілу.
Варіант 10
Написати програму, яка:
виводить текст на екран дисплея;
визначає кількість речень тексту і кількість слів у кожному реченні;
при натисненні довільної клавіші по черзі виділяє кожне речення тексту, а у виділеному реченні – по черзі всі слова.
Варіант 11
Написати програму, яка:
виводить текст на екран дисплея;
визначає кількість букв а в останньому слові тексту;
при натисненні довільної клавіші по черзі виділяє останнє слово, а у виділеному слові – по черзі всі букви а.
Варіант 12
Написати програму, яка:
виводить текст на екран дисплея;
визначає найдовшу послідовність цифр у тексті (вважати, що будь-яка кількість пробілів між двома цифрами не перериває послідовності цифр);
при натисненні довільної клавіші по черзі виділяє кожну послідовність цифр, що містить максимальну кількість символів.
Варіант 13
Написати програму, яка:
виводить текст на екран дисплея;
визначає порядковий номер заданого слова у кожному реченні тексту;
при натисненні довільної клавіші по черзі виділяє кожне речення тексту, а у виділеному реченні – задане слово.
Варіант 14
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє у тексті задане слово (задане слово вводиться з клавіатури);
виводить текст на екран дисплея ще раз, викидаючи з нього задане слово і видаляючи зайві пробіли.
Варіант 15
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє в тексті задані слова, які потрібно поміняти місцями (задані слова вводяться з клавіатури);
виводить текст на екран дисплея ще раз, міняючи в ньому місцями задані слова і видаляючи зайві пробіли.
Варіант 16
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє в тексті задане слово (задане слово вводиться з клавіатури);
виводить текст на екран дисплея ще раз, беручи задане слово в лапки, і по черзі виділяє задане слово разом з лапками.
Варіант 17
Написати програму, яка:
виводить текст на екран дисплея;
виводить текст на екран дисплея ще раз, вставляючи в кожне речення останнім задане слово (задане слово вводиться з клавіатури);
при натисненні довільної клавіші по черзі виділяє в тексті вставлене слово.
Варіант 18
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє в тексті зайві пробіли між словами;
виводить текст на екран дисплея ще раз, прибираючи зайві пробіли між словами і починаючи кожне речення з нового рядка.
Варіант 19
Написати програму, яка:
виводить текст на екран дисплея;
при натисненні довільної клавіші по черзі виділяє в тексті задане слово (задане слово вводиться з клавіатури);
виводить текст на екран дисплея ще раз, замінюючи в заданому слові маленькі букви великими.
Варіант 20
Написати програму, яка:
виводить текст на екран дисплея;
визначає найбільшу кількість пробілів у тексті, що йдуть підряд;
при натисненні довільної клавіші по черзі виділяє кожну з послідовностей пропусків максимальної довжини.
Контрольні запитання
1. На які групи можна розділити бібліотечні функції введення-виведення?
2. Що таке потік?
3. Чи можна відкрити потік, не відкриваючи файла?
4. Як відкрити потік у двійковому режимі?
5. Що повертає функція fopen?
6. Яка функція виводить символ у стандартний вивідний потік?
7. Які функції читають і записують рядок у потік?
8. Як встановити покажчик на кінець потоку, відкритого для читання?
9. Як перевірити, чи досяг покажчик потоку кінця файла?
10. Як перевірити, чи немає помилки при роботі з потоком?
11. Чи можна скинути індикатор помилки, не закриваючи потоку?
12. Яка функція виконує форматоване виведення в потік?
13. Чим відрізняється функція printf від функції fprintf?
14. Що таке поле введення для функції fscanf?
15. Як влаштований рядок формату функції fscanf?
