Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы.doc
Скачиваний:
59
Добавлен:
07.03.2016
Размер:
3.6 Mб
Скачать

Суміщення розгалуженого та циклічного процесів

Визначити значення функції. Значення змінних вибрати самостійно.

Варіанти індивідуальних завдань

Розділ 7. Зовнішні пристрої та символьне введення/виведення. Рядкові, числові функції та функції роботи з датою та часом

7.1. Загальна концепція та функції символьного введення-виведення

На відміну від інших мов програмування, С++ не має команд введення-виведення. Мова C++ характеризується високою переносимістю: це означає, що програма, яка компілюється і виконується на одному комп’ютері, може компілюватися та виконуватися на інших з мінімальними модифікаціями. Розроблювачі компілятора також пишуть функції введення/виведення для кожного типу машини. Тому, коли програма написана на C++ виводить на екран символ, то вона буде працювати незалежно від того з якою операційною системою вона має справу: DOS, WINDOWS або UNIX.

Використання потоків введення-виведення дозволяє використовувати ті ж самі функції для введення, як з клавіатури, так і з модему. Ви можете використовувати ті ж функції для запису файлу на диск, виведення на принтер або на екран (табл. 7.1).

Таблиця 7.1

Стандартні пристрої в C++

Опис

Ім’я C++

Екран

stdout

Клавіатура

stdin

Принтер

stdprn

Послідовний порт

stdaux

Повідомлення про помилки

stderr

Форматоване введення-виведення на принтер.

Виведення на принтер результатів виконання програми легко здійснити за допомогою об’єктів ofstream і його членів-функцій ofstream device (device_name)

Увага!!! ofstream використовує заголовний файл fstream або ostream.

Приклад: Програма запитує в користувача ім’я і прізвище, а потім друкує прізвище та ім’я на принтер.

#include <iostream>

#include <fstream>

using namespace std;

void main()

{

ofstream prn("LPT1");

ifstream ek("CON");

char first[20];

char last[20];

cout << "Ввести прізвище ";

cin >>first;

cout << "Ввести ім’я ";

ek >> last;

prn << first << "\n" << last <<"\n";

}

//Виведення на принтер

ofstream prn("LPT1");

prn << first << "\n" << last <<"\n";

Функції символьного введення-виведення

Об’єкти cin і cout – оператори форматованого введення-виведення і не є функціями символьного введення-виведення. Вони призначені тільки для введення з клавіатури та виведення на екран. Більш універсальними є функції символьного введення-виведення, що дозволяють працювати з будь-якими пристроями.

Функції get() і put().

get() – вводить один символ із стандартного пристрою введення (якщо не було перепризначень, то це клавіатура).

put() – виводить одиничні символи в стандартний пристрій виведення (якщо не було перепризначень, то це екран).

Синтаксис:

device. get(char var)

device – будь-який стандартний пристрій

Якщо введення даних виконується з клавіатури, можна використовувати cin. Якби введення здійснювалося з модему, то необхідно було б використовувати об’єкт ifstream.

Синтаксис функції put():

device. put(char var)

Приклад:

Наступна програма по одному символу зафарбовує ініціали користувача. Програма повинна викликати 2 функції get() для кожного введеного символу. Після того, як на запрошення функції get() ви наберете символ і натиснете <Enter>, C++ знайде дані у вигляді потоку з 2-х символів. Функція get() спочатку одержує набрані символи, а потім одержує символ '\n' (клавіша <Enter>).

Приведемо текст програми.

#include <iostream>

using namespace std;

void main()

{

char a,t,l;

cout << "Ввести 1-й ініціал ";

cin.get(a);

t=a;

cin.get(a); // Ігнорується символ переведення

// рядка

cout << "Ввести 2-й ініціал ";

cin.get(a);

l=a;

cin.get(a); //Ігнорується символ переведення

//рядка

cout << "\nІніціали: \n";

cout.put(t);

cout.put(l);

}

Результат виконання програми:

Ввести 1-й ініціал? A

Ввести 2-й ініціал? C

Ініціали:

АС

Приклад: за допомогою функції get() заповнюється масив, що містить введений користувацький рядок.

Увага: оператор cin обмежений, введення рядків здійснюється по одному слову. Використовуючи get(), можна створювати власні функції, у котрих немає обмежень.

#include <iostream>

using namespace std;

#define MAX 25

int get_in_str(char str[], int len)

{

int i = 0;

char input_char;

cin.get(input_char);

while (i < (len - 1) && (input_char != '\n'))

{

str[i] = input_char; i++;

cin.get(input_char);

}

str[i] = '\0';

return i;

}

void main()

{

int k, i;

char input_str[MAX];

cout << "Введіть повне ім’я ";

k = get_in_str(input_str,MAX);

for(i = 0; i < k; i++)

cout.put(input_str[i]);

}

Функція get() – функція буферизованого введення; означає, що введені символи потрапляють у буфер, а потім у програму. Коли натискається клавіша <Enter>, вміст буфера передається в програму.

Приклад: Введення рядка символів (включаючи пробіли, символи табуляції і переведення рядка). Закінчення введення – клавіша <Ctrl+Z>.

#include <iostream>

using namespace std;

#define MAX 20

void main()

{

char d[MAX];

int i = 0;

while(i < MAX - 1 && cin.get(d[i])) i++;

d[i] = 0;

cout << "------------------\n" << d ;

}

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

Функції getch() і putch().

Вони схожі по формату на функції get() і put(). Функції getch() і putch() не буферизовані, тобто введенні символи не помітні на екрані. Якщо треба побачити символи на екрані, можна використовувати функцію getche(). Якщо треба одержати відповідь від програми відразу ж після введення з клавіатури, використовуйте getch(). Деякі програмісти не хочуть змушувати користувача натискати <Enter> у відповідь на запрошення або вибір із меню. Інші гадають, що буферизоване введення дає користувачу можливість подумати, чи дійсно він хоче вибрати саме цю відповідь, тому що в цьому випадку до натискання клавіші <Enter> користувач може скористатися клавішею <Backspace> і відкоригувати рядок.

Прототипи функцій getch() і putch() описані в заголовному файлі conio.h.

Приклад:

Наступна програма ілюструє роботу функцій getch() і putch(). Видається запит користувачу ввести 5 букв, що за допомогою циклу записуються у масив letters. Символи не виводяться на екран, тому що getch виконує небуферизоване введення, програма одержує кожний символ, поміщає його в масив, і цикл повторюється, в той час як користувач вводить символи. (Якби це було буферизоване введення, цикл не почав би виконуватися доти, поки б не було натиснуто <Enter>.)

#include <iostream>

using namespace std;

#include <conio.h>

void main()

{

int ctr;

char letters[5];

cout << " Введіть символи\n";

for (ctr=0; ctr<5;ctr++)

letters[ctr]=getch();

for (ctr=0;ctr<5;ctr++)

putch(letters[ctr]);

}

Функції gets() і puts()

Синтаксис:

char *gets(char *s);

int puts(char *s);

За допомогою функції gets() виконується зчитування символів із стандартного вхідного потоку stdin. Якщо зустрічається символ переходу на новий рядок, він замінюється символом кінця рядка ('\0'). При використанні функції gets() варто дотримуватись обережності. Адже число введених символів може перевищити розмір пам’яті, відведеної під рядок s. Функція puts() виводить рядок s у стандартний вихідний потік stdout.

Приклад:

#include <iostream>

using namespace std;

#define MAX 255

void main()

{

char s[MAX];

gets(s);

puts(s);

}

Висновки:

Використання потоків форматованого введення-виведення, наприклад cout; ofstream дозволяє здійснити форматоване виведення на будь-який пристрій, включаючи принтер.

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