Студопедия

КАТЕГОРИИ:

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


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




 

Об’єкти 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 дозволяє здійснити форматоване виведення на будь-який пристрій, включаючи принтер.

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

 


Поделиться:

Дата добавления: 2014-12-30; просмотров: 182; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты