- •Основні конструкції мови програмування Базові поняття мови програмування
- •Структура програм
- •Структура програми на мові Рascal
- •Структура програми на мові с
- •Введення-виведення інформації
- •Введення-виведення даних мовою Pascal
- •Введення/виведення даних в с
- •Оператори
- •Оператори реалізації послідовного процесу
- •Оператори розгалуження
- •Оператори циклу.
- •[Ред.] Перевірка типів
- •[Ред.] Діапазон числових типів даних
- •[Ред.] Примітки
Введення/виведення даних в с
У мові С немає вбудованих засобів введення/виведення даних. Для організації відповідних дій використовуються стандартні бібліотечні функції. Введення даних здійснюється із стандартного вхідного файлу 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.