Читайте также:
|
|
Далі наведені основні функції стандартного введення/виведення мови C.
Функция getchar()
Формат функції:
getchar();
Функція вводить з клавіатури один символ і повертає його. Звертатися до цієї функції можна так:
char c; // або
int c;
c = getchar();
Функция putchar()
Формат функції:
putchar(c);
Виводить значення змінної з (один символ) на стандартне вивідний пристрій.
Функция printf()
Формат функції:
printf(Control, arg1, arg2,..., argn);
Це функція форматного виводу. Виводить на екран вміст arg1, arg2,..., Argn і повертає кількість виведених байтів. Control - керуючий символьний рядок, в якому знаходяться формати виводу на екран для відповідних аргументів arg1, arg2,..., Argn, тобто перший формат - для виведення arg1, другий - для arg2 і т. д. Всі символи, що знаходяться між форматами, виводяться один до одного, тобто не форматуються. Це дає можливість виведення додаткового тексту для поліпшення читаності результату виводу.
Формати виводу задаються так: будь-який формат починається з символу '%' і закінчується одним із символів форматування:
- d - аргумент перетвориться до десяткового вигляду (з урахуванням знака);
- o - аргумент перетвориться до восьмеричному беззнаковим увазі;
- x - аргумент перетвориться в беззнакову шістнадцяткову форму (з символами a, b, c, d, e, f);
- Х - аргумент перетвориться в беззнакову шістнадцяткову форму (з символами А, B, C, D, E, F);
- U - аргумент перетвориться в беззнакову десяткову форму;
- з - аргумент розглядається як окремий символ;
- s - аргумент розглядається як рядок символів; символи рядка друкуються до тих пір, поки не буде досягнутий нульовий символ або не буде надруковано кількість символів, вказане в специфікації точності (про специфікатор точності скажемо далі в цьому ж розділі);
- е - аргумент розглядається як змінна типу float або double і перетвориться в десяткову форму у експонентному вигляді: [-]m.nnnnnn e[+-]xx, де довжина рядка з n визначається вказаною точністю. За замовчуванням точність дорівнює 6;
- E - те ж, що і e, але з символом E для експоненти;
- f - аргумент розглядається як змінна типу float або double і перетвориться в десяткову форму у вигляді: [-] Mmm.nnnnnn, де довжина рядка з n визначається вказаною точністю. За замовчуванням точність дорівнює 6;
- g - використовується або формат %e, або %f: вибереться той формат, який дасть зображення числа з меншою кількістю знаків з урахуванням заданої точності. Незначущі нулі не друкуються;
- G - те ж, що і g, але з E для експоненти, якщо використовується формат e;
- n - вказівник на ціле зі знаком;
- p - вхідний аргумент виводиться як вказівник. Формат залежить від моделі використовуваної пам'яті. Він може бути вигляду XXXX: YYYY або YYYY (тільки зміщення).
Між межами формату виводу (від знаку % до символу-специфікатора типу виведеного аргументу) знаходяться:
[Прапорці] [ширина] [. Точність] [F | N | h | l | L]
Квадратні дужки означають, що елемент, що входить в них, може бути відсутнім для якогось формату. Наприклад, якщо виводиться десяткове число, то точність для нього не має сенсу.
- Прапорці визначають вирівнювання виведеного значення (по правому чи лівому краю поля виводу), знаки числа, десяткові крапки, кінцеві нулі, вісімкові і шістнадцяткові префікси. Прапорці мають наступний сенс:
• - (дефіс) - вирівнювання результату по лівому краю поля виводу (число буде притиснуте до лівої межі поля виводу) і заповнення поля виводу праворуч пробілами. Якщо цей прапор не заданий, результат вирівнюється по правому краю поля виведення, а простір, що залишився зліва, заповнюється пробілами або нулями;
• + - перетворення результату до вигляду зі знаком: результат завжди починається зі знака '+' або '-';
• пробіл - якщо значення невід'ємне, замість плюса виводиться пробіл. Для від’ємних чисел виводиться мінус;
• # - вказує, що аргумент повинен бути перетворений з використанням альтернативної форми. Це означає, що якщо прапорець # використовується разом з символом перетворення (форматування), то при перетворенні аргументу для символів c, s, d, u, i, o, x, X символ # не впливає на результат. Для символів e, E, f результат завжди буде містити десяткову точку, навіть якщо за точкою не слідує ніяких цифр (зазвичай десяткова крапка з'являється, якщо за нею слідує цифра). Для символів g, G результат буде як для символів e, E, але з тією відмінністю, що хвостові нулі не будуть видалятися.
Якщо задані і пробіл, і знак '+', то перевагу має знак '+'.
- Специфікатор ширини визначає розмір поля для вихідного значення.
Ширину можна задати двома способами: безпосередньо, рядком десяткових цифр, і побічно, через символ '*': в цьому випадку аргумент повинен мати тип int. Якщо для завдання ширини ви використовуєте символ '*', то специфікація ширини вказується не в рядку Control, а в списку аргументів перед відповідним аргументом.
Специфікатори ширини можуть бути такі:
• n - в цьому випадку виведеться не менше n символів. Якщо в виведеному числі символів менше, ніж n, решта поля заповниться пробілами - праворуч, якщо заданий прапорець, ліворуч - у противному випадку;
• 0n (наприклад, 04) - буде виведено не менше n символів. Якщо в виведеному числі символів менше, ніж n, решта поля заповниться зліва нулями;
• * (для формату d) - якщо для завдання ширини ви використовуєте символ '*', то специфікація ширини вказується не в рядку Control, а в списку аргументів перед тим аргументом, для якого вона визначена.
Причому ширина являє собою окремий аргумент. Наприклад, виводимо число i = 2 по функції:
printf("%*d\n", 5, i);
Результат буде пппп2 (де п - символ пробілу). Тут ширина задана рівною 5 і вказана в списку аргументів окремо, але перед тим аргументом, для якого вона визначена.
- Специфікатор точності задає число виведених символів. Завдання специфікатора точності завжди починається зі знака точки, щоб відокремити його від специфікатора ширини. Як і специфікатор ширини, точність може задаватися двома способами:
• безпосередньо - завданням числа;
• побічно - вказівкою символу '*'.
Якщо ви використовуєте зірочку для специфікатора точності, то специфікація точності вказується не в рядку Control, а в списку аргументів перед відповідним аргументом як окремий аргумент (через кому).
Аргумент, для якого вказується специфікація точності, може бути тільки типу int.
Якщо ви використовуєте зірочку для завдання ширини або точності або для завдання обох специфікацій, то специфікатор ширини повинен відразу слідувати за специфікатором точності: спочатку вказується точність, за нею - ширина. Наприклад, у виклику:
printf ("%. * d \n", 2, 5, i);
задана точність 2 і ширина 5 для цілого числа. Якщо i = 5, то результат буде 05: точність - головна у визначенні ширини поля виводу.
Як задавати точність, видно з табл. 1.
Наприклад, для j = 6.28 по printf ("%. F \n", j) отримаємо результат - 6.
Таблица 1. Завдання специфікатора точності
Специфікатор точності | Опис |
Не заданий | Точність буде встановлена за замовчуванням: • 1 - для форматів d, o, u, x, X; • 6 - для форматів e, E; • всі значущі цифри - для форматів g, G; • до ознаки кінця рядка - для формату s; • не діє - для формату c |
Точність встановлюється за умовчанням - для форматів d, o, u, x. Десяткова крапка не друкується для форматів e, E, f | |
n | Виводиться n символів або n десяткових місць. Якщо в виведеному значенні символів більше n, висновок може бути усічений або заокруглений (це залежить від типу формату) |
. (точка) | Дані виводяться як цілі для формату f |
- Модифікатори розміру, що задаються у форматі, визначають, як функція інтерпретує аргумент. Дія модифікаторів показано в табл. 2.
Таблиця 2. Дія модифікаторів розміру
Значення | Формат | Інтерпретація |
F | p, s | Далекий вказівник |
N | n | Близький вказівник |
h | d, o, u, x, X | short int |
l | d, o, u, x, X | long int |
l | e, E, f, g, G | double |
L | e, E, f, g, G | long double |
L | d, o, u, x, X | __int64 |
h | c, C | 1 символьний байт |
l | c, C | 2 символьних байта |
h | s, S | 1 строка символов по 1 байту на символ |
h | s, S | 1 строка символов по 2 байта на символ |
Наприклад, якщо ми виводимо дані типу long, ми повинні задавати разом з форматом d і модифікатор типу l, тобто загальний вигляд формату буде ld.
Функция scanf()
Формат функції:
scanf(Control, arg1, arg2,..., argn);
Це функція форматного введення з клавіатури. Здійснює посимвольно введення даних з клавіатури, перетворює їх у відповідності з форматом для кожного значення, зазначеному в керуючій (форматної) символьної рядку Control, і результат перетворення записує в аргументи arg1, arg2,..., argn. Сенс рядки Control той же, що і для функції printf (). Так як arg1, arg2,..., argn - це вихідні параметри функції, то при зверненні до функції вони повинні задаватися своїми адресами: імена масивів задаються іменами, т. к. ім'я масиву - це покажчик на його перший елемент, а ті аргументи, які не є покажчиками, задаються як & arg.
Форматна рядок Control - це символьний рядок, що містить три типи об'єктів: незначущі символи, значущі символи і специфікації формату.
Незначущі символи - це пробіл, знак табуляції (\t), символ переходу на новий рядок (\n). Як тільки функція зустрічає незначущий символ в рядку формату, вона зчитує, але не зберігає всі наступні незначущі символи до тих пір, поки не зустрінеться перший значущий символ (тобто пропускає незначущі символи). Значущі символи - це все символи коду ASCII, крім символу '%'. Якщо функція зустрічає в форматної рядку значущий символ, вона його зчитує, але не зберігає. Специфікація формату функції має вигляд:
%[*][ширина][F/N] [h/l] символ_формата
Після символу початку формату '%' в певному порядку слідують інші специфікації:
- * - це необов'язковий символ придушення введення: весь вхідний потік функція розглядає як сукупність полів введення - значущих символів. Якщо в специфікації вказано символ '*', то все поле, яке повинне в даний момент оброблятися функцією по заданому формату, пропускається.
Введення відбувається так: у відповідності зі специфікатором ширини першого формату з вхідного потоку вибирається чергове поле введення (Тобто значущі символи до першого незначущого), яке інтерпретується у відповідності з форматом і записується у відповідний аргумент. Якщо при цьому запитана ширина виявилася меншою поля введення, то залишок поля обробляється функцією по наступному формату. Якщо запитана ширина виявилася більше поля введення, то все поле введення обробляється за даним форматом. Якщо ж в оголошенні формату присутній символ придушення введення '*', то все поле, призначене для обробки даним форматом, пропускається.
- Модифікатори розміру аргументу і символи форматування функції scanf () аналогічні модифікаторам і символам форматування функції printf ().
Розглянемо приклад роботи функції scanf (). Припустимо, задано:
int i; float x; char m[100];
scanf("%2d %f %*d %2s", &i, &x, m);
На клавіатурі набираємо послідовність:
56789 0123 45а72
Як буде йти введення?
У прикладі є три поля введення: 56789, 0123 і 45а72. Функція у відповідності з першим форматом (%2d) вибирає з першого поля перші два символу. Функція інтерпретує їх як десяткове число і привласнює значення першому аргументу: i = 56. У першому полі залишилися необробленими символи 789. Вони потрапляють в роботу функції по другому формату %f. Другий аргумент отримає значення x = 789. Далі повинне оброблятися поле 0123 по третьому формату, але в ньому є символ придушення. Тому поле пропускається і починає оброблятися поле 45а72 за форматом %2s. З цього поля будуть обрані тільки перші два символи і рядок m отримає значення '45'.
Функция sprintf()
Формат функції:
sprintf(string, Control, arg1, arg2,..., argn);
Ця функція аналогічна printf (), за винятком того, що результат своєї роботи вона виводить не на стандартний пристрій виводу, а в рядок string.
Це дозволяє збирати в один рядок дані абсолютно різних типів.
Функция sscanf()
Формат функції:
sscanf(string, Control, arg1, arg2,..., argn);
Ця функція аналогічна scanf (), за винятком того, що вхідні дані для її роботи надходять не зі стандартного пристрою введення, а з рядка string. Це дозволяє виділяти в рядку різні групи даних абсолютно різних типів і поміщати їх в окремі змінні.
Функция cprintf()
Формат цієї функції совпадает с форматом функции printf():
сprintf(Control, arg1, arg2,..., argn);
Параметри аналогічні параметрам printf (). Але для забезпечення роботи цієї функції слід підключити до програми файл conio.h, виконавши:
#include <conio.h>
Якщо функція printf () виводить дані туди, куди призначено stdout (див. початок розд. "Стандартний ввід / вивід"), то функція cprintf () завжди виводить дані на консоль (на це вказує символ 'з' на початку її імені), тобто на екран.
На відміну від printf (), функція cprintf () не переводить символ '\n' в пару "\r \n" - повернення каретки та переведення рядка (замість '\n' треба вказувати обидва цих символу). Крім того, символи табуляції '\t' не перетворюються в пробіли.
Цю функцію не рекомендується використовувати для додатків Win32 або Win32 GUI. Але її можна використовувати для видачі на екран кольорових повідомлень. Для цього треба скористатися функціями textcolor () (встановити колір тексту) і textbackground () (встановити колір фону). Кольори задаються в єдиних аргументах цих функцій, виходячи з табл. 3.
Таблиця 3. Завдання кольору
Колір | Символьна константа | Значення аргумента |
Чорний | BLACK | |
Синій | BLUE | |
Зелений | GREEN | |
Блакитний | CYAN | |
Червоний | RED | |
Пурпурний | MAGENTA | |
Коричневий | BROWN | |
Світло-сірий | LIGHTGRAY | |
Темно-сірий | DARKGRAY | |
Світло-синій | LIGHTBLUE | |
Світло-зелений | LIGHTGREEN | |
Світло-блакитний | LIGHTCYAN | |
Світло-червоний | LIGHTRED | |
Світло-пурпурний | LIGHTMAGENTA | |
Жовтий | YELLOW | |
Білий | WHITE | |
Миготіння кольору | BLINK |
Як аргумент можна брати як символічні константи, так і їх числові значення.
Щоб задати, наприклад, блимання кольору, слід виконати:
textcolor(CYAN + BLINK);
або:
textcolor(3 + 128);
Наведемо приклад програми з функцією cprintf () (лістинг 5).
Дата добавления: 2015-07-10; просмотров: 501 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Приклад зі списком роззсилки | | | Лістинг 5 |