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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

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

 

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

Прототипи всіх обговорюваних тут функцій описані в заголовному файлі ctype. h.

isalpha(c) - Істина (не нуль), якщо буква

islower(c) - Істина (не нуль), якщо мала літера

isupper(c) - Істина (не нуль), якщо прописна буква

isdigit(c) - Істина (не нуль), якщо цифра від 0-9

isalnum(c) - Істина (не нуль), якщо цифра 0-9 або буква

Приклад:

Програма запитує в користувача його ініціал. Якщо користувач вводить що-небудь відмінне від букв, програма виводить повідомлення про помилку і попросить повторити введення.

 

#include <iostream.h>

#include <ctype.h>

 

Void main()

{

char initial;

cout << "Введіть ініціал?";

cin >> initial;

while (! isalpha (initial))

{

cout <<"\n Помилка \n";

cout << "Введіть ініціал?";

cin >> initial;

}

}

Функції перетворення символів.

tolower(c) – перетворить символ до нижнього регістра;

toupper(c) – перетворить символ до верхнього регістра.

 

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

Описуються у файлі string. h

char *strcat(char *s1, const char *s2);

додати рядок s2 у кінець масиву символів s1. Масив s1 повинен мати достатньо вільних елементів.

char *strncat(char *s1, const char *s2, unsigned m);

додати m символів рядка s2 у кінець масиву символів s1. Масив s1 повинен мати достатньо вільних елементів.

char *strchr(char *s, char c);

пошук першого входження символу c у рядку s

int strcmp(const char *s1, const char *s2);

дорівнюються рядки s1 і s2. Повертає:

якщо s1 < s2 -від’ємне значення;

якщо s1 > s2 -додатне значення;

якщо s1 і s2 збігаються - 0.

int strncmp(const char *s1, const char *s2, unsigned m);

теж, що і функція strcmp, але порівнюються перші m символів двох рядків.

Функції stricmp і strnicmp виконують ті ж дії, але без урахування регістра символів (тільки латинські символи).

char *strcpy(char *s1, const char *s2);

копіює рядок s2 у рядок s1.

char *strncpy(char *s1, const char *s2, unsigned m);

копіює перші m символів рядка s2 у рядок s1.

unsigned strlen(const char *s);

повертає довжину s. (Довжина рядка - кількість символів без урахування завершального нуля ’\0’.)

char *strlwr(char *s);

переводить рядок s у нижній регістр (тільки латинські символи).

char *strupr(char *s);

переводить рядок s у верхній регістр (тільки латинські символи).

char *strset(char *s, int ch);

заповнює весь рядок s символами ch.

char *strnset(char *s, int ch, unsigned m);

заміняє перші m символів рядка s на символ ch.

char *strrev(char *s);

перетворить рядок s в зворотному порядку.

unsigned strcspn(const char *s1, const char *s2);

повертає позицію в рядку s1 символу з рядка s2.

char *strpbrk(char *s1, const char *s2);

повертає покажчик на перший символ рядка s1, який міститься в рядку s2.

char *strrchr(char *s, char c);

пошук останнього входження символу c у рядку s

unsigned strspn(const char *s1, const char *s2);

повертає позицію в рядку s1 символа, що не входить у рядок s2.

char *strtok(char *s1, const char *s2);

виділяє фрагменти рядка s1, розділені одно- або багатосимвольними роздільниками з рядка s2. При першому звертанні до strtok видається адреса першого фрагмента. Наступні виклики з завданням NULL замість першого аргументу (s1) будуть видавати адреси наступних фрагментів із рядка s1 доти, поки фрагментів не залишиться.

Перетворення рядків у числа.

atoi(s) – перетворить s до цілого (alphabetic to integer);

atol(s) – перетворить до довгому цілому (alphabetic to long);

atof(s) – до числа з плаваючої точкою (alphabetic to float).

 

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

Прототипи – math. h.

ceil(x) – повертає найближче більше ціле число.

fabs(x) – повертає абсолютне значення x.

floor(x) – повертає найближче менше ціле число.

fmod(x,y) – повертає число з плаваючою точкою, що є залишком від ділення x на y, із тим же знаком, що і x. Аргумент y не може бути нулем.

На відміну від оператора обчислення модуля (%), що працює тільки з цілими числами, функція fmod дозволяє знаходити залишок від ділення чисел із плаваючою точкою.

pow(x,y) – повертає значення x y; якщо x <= 0, то y повинен бути цілим. Якщо x=0, то y не може бути від’ємним.

sqrt(x) – повертає значення

exp(x) – повертає значення eх

log(x) – повертає значення ln x

log10(x) – повертає значення lg x

Тригонометричні функції.

cos(x) → cos x

sin(x) → sin x

tan(x) → tg x

acos(x) → arccos x

asin(x) → arcsin x

atan(x) → arctg x

atan2(y, x) → arctg (y/x)

 

При обчисленні тригонометричних функцій, кути (аргумент функцій cos, sin і tan, а також значення зворотних тригонометричних функцій acos, asin, atan і atan2) виражаються в радіанах.

Аргументи x, y і повертаємі значення числових функцій мають тип double. Якщо до імені функції додати символ l аргументи і повертаємі значення будуть мати тип long double. Наприклад: функції fabsl, powl, sinl, atanl і т.п.

Функції генерації випадкових чисел.

Прототипи stdlib. h

rand() – повертає псевдовипадкове ціле число в діапазоні від 0 до 32767.

random(x) – повертає псевдовипадкове ціле число в діапазоні від 0 до (x -1) (не має місця у Visual C++).

Якщо потрібний інший набір випадкових чисел, використовується функція srand(seed), де seed – ціла зміна або константа.

Якщо необхідно при кожному запуску програми генерувати різноманітну множину випадкових чисел, можна використовувати функцію randomize() (не має місця у Visual C++). Вона реалізована як макропідстановка, що викликає функцію time(), тому необхідно включати файл time.h.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-10; просмотров: 232; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.93.209 (0.064 с.)