Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 1.3.4 Функції введення та виведення - Програмування С, С++теорія та практика (частина 1) - Studbook
Главная->Інформатика та програмування->Содержание->1.3.4 Функції введення та виведення

Програмування С, С++теорія та практика (частина 1)

1.3.4 Функції введення та виведення

Що б там не було, але реальні програми важко уявити без використання операцій введення та виведення.

В мові Сі на стандартні потоки введення-виведення (в більшості випадків - клавіатура та монітор) завжди вказують імена зійіп та зійоиі. Обробку цих потоків здійснюють функції, визначені в заголовочному файлі зійіо.к.

Розглянемо основні функції введення-виведення.

Функція деіскаг() зчитує і повертає черговий символ з послідовності символів вхідного потоку. Якщо цю послідовність вичерпано, то функція деіскаг() повертає значення -1 (цьому значенню відповідає константа ЕОР).

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

Приклад :

#іпсІийе<з'Ьйіо. Ь>

Vоій таіп()

{

сЬаг сЬ; сЬ=де^сЬаг() ; ри'ЬсЬаг(сЬ) ;

}

Для введення та виведення більш складної інформації використовуються функції зсап/() та ргіпі/().

Функція ргіпі/() призначена для виведення інформації за заданим форматом. Синтаксис функції ргіпі/():

ргіп^СРядок формату”[, аргумент1[, аргумент2, [...]]]);

Першим параметром даної функції є „рядок формату”, який задає форму виведення інформації. Далі можуть розташовуватися вирази арифметичних типів або рядки (в списку аргументів вони відокремлюються комами). Функція ргіпі/() перетворює значення аргументів до вигляду, поданого у рядку формату,                       „збирає”

перетворені значення в цей рядок і виводить одержану послідовність символів у стандартний потік виведення.

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

Таблиця 1.3. Значення основних модифікаторів рядка формату

Модифікатор

Значення

-

Аргумент буде друкуватися починаючи з лівої позиції поля заданої ширини. Звичайно друк аргументу закінчується в самій правій позиції поля. Приклад : %-10сІ

Рядок цифр

Задає мінімальну ширину поля. Поле буде автоматично збільшуватися, якщо число або рядок не буде вміщуватися у полі. Приклад : %4сІ

Цифри.цифри

Визначає точність : для типів даних з плаваючою комою - число символів, що друкуються зліва від десяткової коми; для символьних рядків - максимальну кількість символів, що можуть бути надруковані. Приклад : %4.2Ї

Приклад :

#іпсІийе<з'Ьйіо. Ь>

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[, ...]]);

Так, як і для функції ргіпґ/(), для функції $сап/() вказується рядок формату і список аргументів. Суттєва відмінність у синтаксисі цих двох функцій полягає в особливостях даного списку аргументів.

Функція ргіпі/() використовує імена змінних, констант та вирази, в той час, як для функції зсап/ () вказується тільки покажчики на змінні.

Поширеною помилкою використання зсап/() у початківців є звертання: зсап/(“%й”,п) замість зсап/(“%й”,&п). Параметри цієї функції обов’язково повинні бути покажчиками!

Функція зсап/() використовує практично той же набір символів специфікації, що і функція ргіп/().

#іпсІийе <з^йіо.Ь> таіп()

{

іп£ а,Ь,с; ргіп££("А="); зсап£("%й",&а) ; ргіп££("В=") ; зсап£("%й",&Ь) ; с=а+Ь;

ргіп^£("А+В=%й",с) ;

}

Більшість реалізацій мови Сі дозволяють пов’язувати імена зійіп та зійоиі не тільки з клавіатурою та екраном, а й із зовнішніми файлами. Для цього в рядку виклику Сі програми необхідно вказати імена цих файлів. Якщо перед ім’ям файлу введення поставити знак <, то даний файл буде пов’язаний з потоком введення. ргод < £іІе.іп

В даному прикладі інформація читається з файлу /ііе.іп поточного каталогу, а не з клавіатури, тобто цей файл стає стандартним файлом введення, на який вказує зійіп. ргод > £іІе. ои'Ь

А при такому виклику програми інформація виводиться не на екран, а у файл /ііе.оиі.

Якщо необхідно читати інформацію з одного файлу, а результати записувати у інший одразу, виклик програми буде мати вигляд : ргод < £іІе. іп > £іІе. ои'Ь

 

16