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



ЗНАЕТЕ ЛИ ВЫ?

Введення-виведення типів int i long

Поиск

Читати і записувати дані типів int i long дуже просто, оскільки всю роботу роблять вбудовані механізми вставки і вилучення символів. Коли з потоку вилучаються int i long, система автоматично очищує ввід від служебних символів.

Можна управляти вводом і виводом чисел, змінивши наступні атрибути:

систему числення (десяткова, вісімкова, шістнадцяткова)

ширину поля

вирівнювання

заповнення поля

наявність знака +

використання великих букв (для шістнадцяткових чисел)

Атрибути змінюються спеціальними маніпуляторами потоку. При виводі по замовчуванню друкуються лише значущі цифри числа без заповнення всіх позицій поля. Під час вводу будь-який символ, що не є цифрою, знаком + (плюс) або – (мінус), припиняє операцію вилучення. Значення, яке повертається, є числом, що складається з символів, зчитаних до завершення операції.

 

Введення-виведення типів float i double

Типи float i double читати і записувати так само легко, як int i long. При вилученні чисел з потоку спочатку пропускаються всі символи пропуску. Вилучення припиняється на першому символі, не допустимому в числі з плаваючою крапкою. Вбудовані механізми вставки і вилучення забезпечують таку поведінку по замовчуванню.

Формат, який використовується для відображення float i double, легко змінити за допомогою маніпуляторів. Зокрема, можна керувати наступними атрибутами:

кількість десяткових цифр

використання наукового запису

друк знака +

заповнення

ширина поля

вирівнювання

Читання float, double і long double припиняється виявленні недопустимого для числа символу. Недопустимі символи з потоку не вилучаються.

 

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

Потоки елегантно працюють не лише з вбудованими типами даних С++, але і з класами користувача. Все, що потрібно зробити, так це перегрузити оператори вставки в потік і вилучення з потоку. Відповідний приклад 3 з використанням класу Point приведено нище.

 

Приклад 3. Ввід-вивід класу користувача

 
 

#include <iostream.h>

 

class Point {

float x, y, z;

public:

Point(float i, float j, float k) {x=i; y=j; z=k;}

 

friend ostream operator<<(ostream& os, Point& p);

friend istream operator>>(istream& is, Point& p);

};

 

ostream& operator<<(ostream& os, Point& p)

{

return os << ‘(’

<< p.x << ‘ ’

<< p.y << ‘ ’

<< p.z << ‘)’;

}

 

istream& operator>>(istream& is, Point& p)

{

return is >> p.x >> p.y >> p.z;

}

 

void main()

{

Point(2, 3, 5);

cout << “\n\nCoordinates of p are ” << p;

 

//отримання нових координат

cout << “\nNew coordinates?”;

cin >> p;

 

//відображення нових координат

cout << “\nCoordinates of p are ” << p;

}


 

Маніпулятори

З появою бібліотеки вводу-виводу ANSI C форматування даних стало більш гнучким. За допомогою функцій printf(...) i sprintf(...) стали доступними як форматований вивід в файл, так і форматування даних в пам’яті. І навпаки, форматовані дані можна зчитати в змінні за допомогою функцій scanf(...) i sscanf(...).

Для роботи з будь-яким вбудованим маніпулятором використовується стандартний заголовочний файл iomanip.h. більшість маніпуляторів впливають на потік в наступних операціях з потоком. Це означає, що будь-які зміни в форматуванні потоку зберігаються до тих пір, поки не будуть внесені нові зміни. Нижче приведено список всіх вбудованих маніпуляторів.

 

dec Встановлює десяткову систему числення.

Впливає на int і long. Потоки використовують основу 10 за замовчуванням

 

hex Встановлює шістнадцяткову систему числення

 

oct Встановлює вісімкову систему числення

 

ws Вибирає з потоку вводу символи пропуску.

Потік буде читатися до появи символу, який

відрізняється від пропуску, або до виникнення

помилки потоку

 

endl Вставляє в потік виводу символ нової стрічки і

потім очищає потік

 

ends Вставляє ‘\0’ в потік виводу

 

flush Очищає потік виводу

 

setbase(int) Встановлює основу числення до будь-якого з

чотирьох значень:

0: Основа по замовчуванню. При виводі

використовується десяткова основа, при вводі –

числа, що починаються з ‘0’, вважаються

вісімковими, числа, що починаються з ‘0x’, –

шістнадцятковими. У всіх інших випадках

основа вважається десятковим.

8: Для вводу-виводу використовується

основа 8

10: Для вводу-виводу – 10

16: Для вводу-виводу – 16

Інші значення ігноруються. Бібліотека iostream

не підтримує довільних основ, подібних 3, 12 і

т.д. Якщо потрібно представити значення за

основою, яка відрізняється від 8, 10 або 16, то

відповідне перетворення потрібно виконати

явно

 

resetiosflags(long) Очищає один або більше флагів

форматування в ios::x_flags

 

setiosflags(long) Встановлює дин або більше флагів

форматування в ios::x_flags

 

setfill(int) Встановлює символ-зповнювач. Символ-

заповнювач використовується для заповнення

поля тоді, коли ширина поля більша за ширину

виведеного значення. Заповнення не буде, якщо

користувач не вказав мінімальної ширини поля

за допомогою маніпулятора setw(int) або

функції ios::width(int). По замовчуванню

символом-заповнювачем є пробіл. Заповнення

буде проходити справа, зліва або якось іще, в

залежності від значення бітів

ios::adjustfield, встановлених

звертанням до ios::setf(long)

 

setprecision(int) Встановлює число цифр після десяткової

крапки в числах з плаваючою крапкою. Цей

маніпулятор діє лише на потоки виводу

 

setw(int width) Встановлює ширину наступної змінної, яка

вставляється в потік. Якщо значення наступної

змінної потребує для запису менше місця, ніж

вказано, то буде здійснюватися заповнення

символом-заповнювачем, встановленим

маніпулятором setfill(int)

 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 294; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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