Введення/виведення даних в С
У мові С немає вбудованих засобів введення/виведення даних. Для організації відповідних дій використовуються стандартні бібліотечні функції. Введення даних здійснюється із стандартного вхідного файлу stdin (тобто, з клавіатури), виведення – у стандартний вихідний файл – stdout (тобто, на дисплей). Форматоване введення / виведення. Форматоване введення здійснюється функціями: § scanf - вводить дані із стандартного потоку вводу stdin у відповідності із заданим форматом, записуючи їх у змінні, адреси яких задаються аргументами; § сscanf – реалізує кольорове введення, якщо попередньо встановлений колір символів, що вводяться (за допомогою функції TextColor); § sscanf - вводить дані із символьного масиву у змінні, адреси яких задаються аргументами. Формат виклику функції scanf: scanf(<форматний_рядок>,<список_аргументів>), де <список_аргументів>::=&<аргумент>{,&<аргумент>} <форматний_рядок>::=”%[<ширина_поля>]<специфікатор> {%[<ширина_поля>]<специфікатор>}” Аргументами функції scanf є не імена змінних, а їхні адреси (знак & означає узяття адреси). Символ «%» є символом початку задання формату введення чергового аргумента. Специфікатор визначає тип аргумента функції scanf. Для числових даних використовуються специфікатори: d – для цілих десяткових чисел (тип int); u – для цілих десяткових без знака (тип unsigned int); f – для дійсних чисел (тип float); e – для дійсних чисел в експоненціальній формі (тип float). Перед специфікатором можна вказати кваліфікатор (префікс) h, l чи L. Наприклад: %lf,%le,%hd. Для цілих типів префікс h еквівалентний short, префікс l – long. Для дійсних типів префікс l означає, що тип аргументу не float, а double. Для префікса L – тип long double. ¨¨¨ Форматний рядок завжди береться в подвійні лапки. Функція scanf зчитує коди з клавіатури, перетворює їх у відповідності із специфікацією форматного рядка і передає програмі. Форматний рядок і список аргументів для функції scanf – обов'язкові параметри. Формат виклику функції sscanf: scanf(<рядок>,<форматний_рядок>,<список_аргументів>). Наприклад, scanf(“%d%f”,&a,&b); char *st=“12 5.6“; sscanf(st,“%d%f”,&a,&b); // a=12 b=5.6 Форматоване введення здійснюється функціями: § printf - записує аргументи у стандартний потік stdout у відповідності із заданим форматом; § cprintf - реалізує кольорове виведення, якщо попередньо встановлений колір символів, що вводяться; § sprintf - форматує та виводить послідовність символів і значень аргументів у символьний масив. Формат виклику функції printf: printf(<форматний_рядок>,<список_аргументів>), де <список_аргументів>::=<аргумент>{,<аргумент>} <форматний_рядок>::=”%[<літерал>][<маркер>][<ширина_поля>] [.<точність>]<специфікатор>{%[<літерал>] [<маркер>][<ширина_поля>][.<точність>] <специфікатор>}” При описі формату виведення використовуються наступні позначення: <маркер> – специфікатор вирівнювання виведених знаків, пропусків, десяткових крапок, вісімкових і шістнадцяткових префіксів; <точність> – максимальне число символів, які будуть надруковані після коми. Функція printf переводить дані з внутрішнього коду в символьне представлення відповідно до форматного рядка і виводить отримані символи на екран. Форматний рядок може включати довільний текст, керуючі символи та специфікації перетворення даних. Список аргументів є необов'язковим параметром даної функції. Функцію printf можна використовувати для виводу будь-якої комбінації символів, цілих та дійсних чисел, довгих цілих, беззнакових довгих цілих тощо. Формат виклику функції sprintf: sprintf(<форматний_рядок>,<список_аргументів>). Для використання в програмі функцій printf і scanf необхідно підключити заготовочний файл <stdio.h>. Приклад програми (обчислення площі кругу): #include <stdio.h> void main() { double r,s; const float pi=3.14; printf("\n r="); scanf("%lf",&r); s=pi*r*r; printf("\nПлоща кола: %10.3f",s); } Потокове введення / виведення. Потокове виведення виконується за допомогою операції зсуву вліво («помістити в потік») ”<<”. Стандартна операція ”<<” для операцій виведення перевизначається, тобто для неї визначаються нові можливості. Потокове введення аналогічне виведенню, але використовує перевизначену операцію зсуву вправо () ”>>”. Операція «помістити в потік» (”<<”)має асоціативність зліва направо: (((cout<<"47+ 53 =")<<(47+53))<<endl). Тобто, багаторазові операції ”<<” виконуються у тій послідовності, у якій вони записані. Такий спосіб об’єднання операцій «<<» можливий, оскільки дана операція повертає посилання на об’єкт свого лівого операнда (на об’єкт cout). Отже, саме лівий вираз в круглих дужках (cout << «47 + 53 =") виводить заданий рядок символів і повертає посилання на cout. Тому середній вираз в круглих дужках має виконуватися, тобто виводити ціле значення 100 і повертає посилання на cout, наприклад: (cout <<(47+53)). Потім виконується самий правий вираз у круглих дужках, наприклад: cout << endl, який переводить рядок, скидає cout і повертає посилання на cout. Аналогічно, багаторазовою є і операції ”>>”. Для керування потоковим введенням/виведенням можуть використовуватися маніпулятори потоків, які виконують завдання форматування і такі операції, як установлення ширини полів виведення, визначення точності, вставку у вихідний потік символа нового рядка тощо. Наприклад, маніпулятор hex задає форматування із шістнадцятковим перетворенням, endl - вставку символа нового рядка і очищення потоку. Стандартні засоби потокового введення/ виведення описані у бібліотеці iostream. Інтерфейс цієї бібліотеки – це кілька заголовних файлів: - iostream.h - містить основні відомості для операцій з потоками, а також об’єкти cіn, cout, cerr, які відповідають стандартним потокам введення-виведення та повідомлень про помилки; - іomanіp.h – обробляє форматоване введення-виведення за допомогою параметризованих маніпуляторів потоку. Наприклад, #include <iostream.h> void main() { double r,s; const float pi=3.14; cout<< "\nr="; cin >> r; s=pi*r*r; cout<< "\nПлоща кола: " << s << endl; } Введення / виведення символів та рядків. Для введення / виведення символів та рядків у мові С++ служать наступні основні функції: - getchar - введення символу з клавіатури із його ехо-друком; - getch - введення символу з клавіатури без його ехо-друку; - putchar - виведення символу на екран; - gets - введення рядка з клавіатури; - puts - виведення рядка на екран. ¨¨¨ Після введення символу за допомогою функції getchar треба очистити буфер клавіатури (використати функцію fflush (stdin)). Описи відповідних функцій введення / виведення містяться у бібліотеці stdio.h.
Библиотека С поддерживает три уровня ввода-вывода: - потоковый ввод-вывод; - ввод-вывод нижнего уровня; - ввод-вывод для консоли портов (зависит от конкретной ОС). Рассмотрим потоковый ввод-вывод.
|