Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Функції стандартного введення/виведення

Читайте также:
  1. I. ПРИЕМЫ СТАНДАРТНОГО ПОИСКА ИНФОРМАЦИИ В СЕТИ ИНТЕРНЕТ
  2. Введення/виведення файлів
  3. Документ та його функції. Загальні вимоги до його укладання й оформлення. Ознаки та групи класифікації документів
  4. Економічна суть та функції фінансів. Склад фінансових ресурсів підприємств.
  5. Екскурсія її основні функції. Класифікація екскурсій.
  6. Завдання та функції комерційної служби підприємства оптового ринку
  7. Науковий стиль: функції, характерні ознаки, мовні засоби, різновиди. Словники у професійному мовленні

Далі наведені основні функції стандартного введення/виведення мови 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 | Нарушение авторских прав


Читайте в этой же книге: Половозрастные особенности проявления агрессивности в поведении детей подросткового возраста | Профилактика и коррекция агрессивного поведения | МЕТОДИКА КОРРЕКЦИИ АГРЕССИВНОГО ПОВЕДЕНИЯ В ПОДРОСТКОВОМ ВОЗРАСТЕ | Мероприятия по коррекции агрессии в подростковом возрасте | Анализ проявлений различных форм агрессивности у подростков 10-15 лет | Анализ проявлений различных форм агрессивности у подростков из семей учителей, врачей, инженеров | Опросник уровня агрессивности Басса - Дарки | Опросник | Введення/виведення файлів | Функції для роботи з файлами |
<== предыдущая страница | следующая страница ==>
Приклад зі списком роззсилки| Лістинг 5

mybiblioteka.su - 2015-2024 год. (0.015 сек.)