Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ Metod_new.doc
Скачиваний:
3
Добавлен:
10.11.2019
Размер:
939.52 Кб
Скачать

Тема 6: зовнішні пристрої і символьне введення/виведення план

  1. Загальна концепція.

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

  3. Символьні функції.

  4. Рядкові функції.

  5. Числові функції.

  6. Функції роботи з датою та часом.

1. Загальна концепція

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

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

Таблиця 6

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

Опис

Ім’я C++

Екран

stdout

Клавіатура

stdin

Принтер

stdprn

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

stdaux

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

stderr

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

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

Увага!!! ofstream використовує fstream. h

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

#include <fstream.h>

void main()

{

ofstream prn("LPT1");

ifstream ek("CON");

char first[20];

char last[20];

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

cin >>first;

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

ek >> last;

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

}

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

ofstream pru("PRN");

pru << last << " " << first << "\n";

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

Об’єкти 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 <fstream.h>

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 <fstream.h>

#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.h>

#include <stdio.h>

#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 <conio.h>

#include <fstream.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.h>

#include <stdio.h>

#define MAX 20

void main()

{

char s[MAX];

gets(s);

puts(s);

}

Висновки:

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]