Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
new_mb.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
892 Кб
Скачать
☆

1.8. Потоковый ввод – вывод

В С++ операции ввода и вывода реализуются с помощью объектов «cin» и «cout», доступных при подключении стандартной библиотеки <iostream>. Они предназначены для работы со стандартными потоками. Потоком же называют некоторый абстрактный канал связи между источником данных и их приемником. Для объекта «cin» источником является консоль, а для объекта «cout», консоль является приемником, поэтому «cin» используется для ввода данных, а «cout» – для их вывода.

Для того, чтобы вывести на экран какие-либо данные, необходимо воспользоваться оператором вывода «<<», а для ввода данных используется оператор ввода «>>». Наравне со стандартными потоками вывода возможно и использование унаследованных из языка С функций «printf()» или «scanf()», однако их использование представляется более утомительным, т.к. эти функции требуют явного указания типов данных. Более того, операторы ввода и вывода могут быть перегружены, что делает работу со своими классами аналогичной работе со стандартными.

Потоковые операции ввода и вывода являются каскадируемыми, т.е. нет необходимости при каждой операции ссылаться на объект потока. Это связано с тем, что возвращаемым результатом данных операторов является сам поток, который и может быть снова использован.

Листинг 1.4. Каскадирование.

#include <iostream>

using namespace std;

int main (void)

{

char c;

int i;

cout << "enter char x and int y" << endl;

cin >> c >> i;

cout << "c = " << c << endl << "i = " << i << endl;

return 0;

}

Важным свойством потоков является их способность различать манипуляторы, оказывающие действие на данные, следующие за ними.

Наиболее часто употребляется манипулятор «endl», функциональность которого для консоли аналогична выводу символа «\n» – переводу строки. В стандартной библиотеке, в файле <iomanip> определены различные манипуляторы, позволяющие форматировать поток.

Листинг 1.5. Использование манипуляторов.

#include <iostream>

#include <iomanip>

using namespace std;

int main (void)

{

const bool x = true;

cout << boolalpha << x << " or " << noboolalpha << x << endl;

const unsigned int y = 15;

cout << "hex: " << hex << y << endl;

cout << "oct: " << oct << y << endl;

cout << "dec: " << dec << y << endl;

double z = 1234567889e-9;

cout << z << endl;

cout << left << setw(10) << setfill('0') << z << endl;

cout << right << setw(10) << setfill('0') << z << endl;

cout << setprecision(9) << z << endl;

cout << noshowpoint << 1.0 << endl;

cout << showpoint << 1.0 << endl;

return 0;

}

Таблица 1.4. Некоторые стандартные манипуляторы.

Манипулятор

Описание

boolalpha /

noboolalpha

Логические переменные в виде «true», «false» или «1», «0»

hex / dec / oct

Числа в шестнадцатеричном, десятичном, восьмеричном виде

setprecision()

Задание числа выводимых дробных разрядов

setw()

Задание ширины поля вывода чисел

setfill()

Задание символа – заполнителя свободного пространства

internal

Заполнение между знаком или основанием и самим числом

left / right

Задание положения поля данных

showpoint / noshowpoint

Дробные чисела без дробной части с точкой или без нее

showpos

Выводить знак «+» перед положительными числами

skipws / noskipws

Пропуск пробельных символов или их считывание, как лексем

ws

Пропуск пробельной последовательности

uppercase

Вывод в верхнем регистре шестнадцатеричных символов, «E» и «X»

scientific / fixed

Экспоненциальный вывод числа или вывод с фиксированной точкой

Наряду с манипуляторами применяются различные методы по работе с потоками ввода – вывода. Метод «ignore()» удаляет из потока ввода часть символов. Метод «clear()» сбрасывает флаги состояния потока, например, флаг «goodbit» – отсутствия ошибок. Доступ к флагам осуществляется соответствующими методами; для «goodbit» – это метод «good()».

Листинг 1.6. Методы.

#include <iostream>

#include <iomanip>

#include <fstream>

using namespace std;

int main (void)

{

int iter;

cin >> iter; //ввод целого числа;

cout << cin.good() << endl; //при неверном вводе;

cin.clear(ios::goodbit); //сброс флага good;

cin.ignore(1, '\n'); //удаление из потока введеного числа;

cin >> iter; //очередной ввод;

cout << endl;

return 0;

}

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