Програмування С, С++теорія та практика (частина 1)
1.3.4 Функції введення та виведення
Що б там не було, але реальні програми важко уявити без використання операцій введення та виведення.
В мові Сі на стандартні потоки введення-виведення (в більшості випадків - клавіатура та монітор) завжди вказують імена зійіп та зійоиі. Обробку цих потоків здійснюють функції, визначені в заголовочному файлі зійіо.к.
Розглянемо основні функції введення-виведення.
Функція деіскаг() зчитує і повертає черговий символ з послідовності символів вхідного потоку. Якщо цю послідовність вичерпано, то функція деіскаг() повертає значення -1 (цьому значенню відповідає константа ЕОР).
Функція риіскаг(аргумент), де аргументом є вираз цілого типу, виводить у стандартний вихідний потік значення аргументу, перетворене до типу скаг.
Приклад :
#іпсІийе<з'Ьйіо. Ь>
Vоій таіп()
{
сЬаг сЬ; сЬ=де^сЬаг() ; ри'ЬсЬаг(сЬ) ;
}
Для введення та виведення більш складної інформації використовуються функції зсап/() та ргіпі/().
Функція ргіпі/() призначена для виведення інформації за заданим форматом. Синтаксис функції ргіпі/():
ргіп^СРядок формату”[, аргумент1[, аргумент2, [...]]]);
Першим параметром даної функції є „рядок формату”, який задає форму виведення інформації. Далі можуть розташовуватися вирази арифметичних типів або рядки (в списку аргументів вони відокремлюються комами). Функція ргіпі/() перетворює значення аргументів до вигляду, поданого у рядку формату, „збирає”
перетворені значення в цей рядок і виводить одержану послідовність символів у стандартний потік виведення.
Рядок формату складається з об’єктів двох типів : звичайних символів, які з рядка копіюються в потік виведення, та специфікацій перетворення. Кількість специфікацій у рядку формату повинна дорівнювати кількості аргументів.
|
Таблиця 1.3. Значення основних модифікаторів рядка формату
Приклад : #іпсІийе<з'Ьйіо. Ь> Vоій таіп() { |
іп£ а=10,Ь=20,с=30;
ргіп^£(" а==%й \п Ь==%й \п с==%й \п",а,Ь,с);
}
Специфікації перетворення для функції ргіпі/():
%й - десяткове ціле;
%і - десяткове ціле;
%о - вісімкове ціле без знаку;
%и - десяткове ціле без знаку (ипзідпей)
%х - шістнадцяткове ціле без знаку;
0% - представлення величин ііоаі та СоиЬІе з фіксованою точкою;
%е або %Е - експоненціальний формат представлення дійсних величин;
%д - представлення дійсних величин як і або Е в залежності від значень;
%с - один символ (сНаг);
%з - рядок символів;
%р - покажчик %п - покажчик
%Ігі - Іопд (в десятковому вигляді);
%Іо - Іопд (у вісімковому вигляді);
%р - виведення покажчика в шістнадцятковій формі;
%Іи - ипзідпей Іопд.
Можна дещо розширити основне визначення специфікації перетворення, помістивши модифікатори між знаком % і символами, які визначають тип перетворення (таблиця 1.3.).
Розглянемо декілька прикладів:
Приклад 1 :
#іпсІийе <з^йіо.Ь> таіп()
{
ргіп££("/%й/\п",336); ргіп^£("/%2й/\п",336); ргіп^£("/%10й/\п",336); ргіп^£("/%-10й/\п",336);
};
Результат виконання програми буде виглядати так :
/336/
/336/
/ 336/
/336 /
Приклад 2 :
#іпсІийе <з^йіо.Ь> таіп()
{
ргіп££("/%£/\п",1234.56); ргіп^£("/%е/\п",1234.56); ргіп££("/%4.2£/\п",1234.56); ргіп££("/%3.1£/\п",1234.56); ргіп££("/%10.3£/\п",1234.56); ргіп££("/%10.3е/\п",1234.56);
}
На цей раз результат виконання програми буде виглядати так :
/1234.560000/
/1.234560е+03/
/1234.56/
/1234.6/
/ 1234.560/
/ 1.235е+03/
Для введення інформації зі стандартного потоку введення використовується функція асап/().
Синтаксис :
5сап^(“Рядок формату”,&аргумент1[,&аргрумент2[, ...]]);
Так, як і для функції ргіпґ/(), для функції $сап/() вказується рядок формату і список аргументів. Суттєва відмінність у синтаксисі цих двох функцій полягає в особливостях даного списку аргументів.
Функція ргіпі/() використовує імена змінних, констант та вирази, в той час, як для функції зсап/ () вказується тільки покажчики на змінні.
Поширеною помилкою використання зсап/() у початківців є звертання: зсап/(“%й”,п) замість зсап/(“%й”,&п). Параметри цієї функції обов’язково повинні бути покажчиками!
Функція зсап/() використовує практично той же набір символів специфікації, що і функція ргіп/().
#іпсІийе <з^йіо.Ь> таіп()
{
іп£ а,Ь,с; ргіп££("А="); зсап£("%й",&а) ; ргіп££("В=") ; зсап£("%й",&Ь) ; с=а+Ь;
ргіп^£("А+В=%й",с) ;
}
Більшість реалізацій мови Сі дозволяють пов’язувати імена зійіп та зійоиі не тільки з клавіатурою та екраном, а й із зовнішніми файлами. Для цього в рядку виклику Сі програми необхідно вказати імена цих файлів. Якщо перед ім’ям файлу введення поставити знак <, то даний файл буде пов’язаний з потоком введення. ргод < £іІе.іп
В даному прикладі інформація читається з файлу /ііе.іп поточного каталогу, а не з клавіатури, тобто цей файл стає стандартним файлом введення, на який вказує зійіп. ргод > £іІе. ои'Ь
А при такому виклику програми інформація виводиться не на екран, а у файл /ііе.оиі.
Якщо необхідно читати інформацію з одного файлу, а результати записувати у інший одразу, виклик програми буде мати вигляд : ргод < £іІе. іп > £іІе. ои'Ь
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
