Студопедия

Главная страница Случайная страница

Разделы сайта

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






Потоковый ввод-вывод данных






 

Процесс ввода-вывода данных предполагает обмен данными между ОП и внешними устройствами. Например, между ОП и клавиатурой, ОП и жестким диском и др. Под вводом понимается запись данных с внешнего устройства в ОП; под выводом – чтение информации из ОП и перенос этой информации на внешнее устройство.

В языке С++ процесс ввода-вывода информации тесно связан с понятием потока – последовательностью байтов, передаваемой в процессе ввода-вывода данных. Так как при вводе-выводе информации создается связь между ОП и внешними устройствами, то в процессе выполнения программы созданные потоки связываются с конкретными внешними устройствами. По-другому говорят, что поток направлен на внешнее устройство.

При запуске программы кроме потоков, которые объявляет программист, создаются три основных стандартных потока:

1) stdin – поток стандартного ввода (как правило связан с клавиатурой);

2) stdout – поток стандартного вывода (обычно связан с монитором);

3) stderr – поток сообщений об ошибках (всегда связан с монитором).

 

2. Форматированный ввод-вывод в С++

 

В разделе «Линейные вычислительные процессы» были рассмотрены функции ввода–вывода printf() и scanf(). В языке С++ существует стан­дартная библиотека (головной файл), ориентированная на организацию потокового форматированного ввода-вывода – iostream.h. Потоковый форматированный ввод-вывод в С++ основан на понятии объектов, под которыми понимаются величины, содержащие в себе свойства (характеризуют состояние объекта в данный момент времени) и методы (функции, которые могут изменять свойства объекта).

В библиотеке iostream.h описаны два объекта:

1) cout – поток вывода, связанный с дисплеем;

2) cin – поток ввода, связанный с клавиатурой.

Знак < < (два знака меньше подряд) обозначает операцию вставки символов в поток вывода cout, а знак > > (два знака больше подряд) – операцию извлечения из потока ввода cin:

int i;

float f;

cout< < " Введите целое число "; //на монитор выводится текст

cin> > i; //с клавиатуры вводится целое число

f=5.9*i;

//на монитор выводится текст и значение переменной

cout< < " Значение f = " < < f< < " \n";

Часть строки " \n" обозначает перевод курсора на следующую строку.

Для организации форматированного потокового ввода-вывода в С++ существуют два средства: применение флагов форматирования; применение манипуляторов.

Флаги форматирования управляют форматом выводимых значений и тесно связаны с объектно-ориентированным программированием, поэтому в этом разделе не будем их рассматривать.

Для управления форматами потокового вывода можно использовать специальные функции, называемые манипуляторами. Доступ к стандартным манипуляторам можно получить, подключив файл iomanip.h. Список стандартных манипуляторов:

Манипулятор Назначение манипулятора
dec Десятичный формат
endl Вывод " \n" и освобождение буфера
hex Шестнадцатеричный формат числа
setbase(int baz) Установить основание системы счисления baz
setfill(char ch) Установить символ заполнения ch
setprecision (int pr) Установить рr цифр в дробной части
setw(int wd) Установить ширину wd поля выдачи

Пример. Вывести на экран таблицу из 10 значений функций . Для форматирования таблицы результатов использовать манипуляторы.

 

Программа, реализующая эту задачу:

 

#include < iostream.h>

#include < math.h>

#include < iomanip.h>

int main()

{

float a, b, x, h;

int i;

a=0;

b=4*atan(1);

h=(b-a)/10;

cout< < " x sin(x) cos (x)" < < endl;

cout< < endl;

x=a;

for(i=1; i< =10; i++)

{

cout< < setprecision (4)< < setw(7)< < x< < " "

< < setprecision(4)< < setw(7)< < sin(x)< < " "

< < setprecision(4)< < setw(7)< < cos(x)< < endl;

x=x+h;

}

return 1;

}

Результат работы программы:

Под каждое выводимое значение выделяется по 7 позиций на экране. По умолчанию число занимает крайнюю правую позицию в отведенном под него поле. Оставшиеся слева позиции занимает символ-заполнитель. По умолчанию символом-заполнителем является пробел. Однако с помощью манипулятора setfill() его можно заменить. Если в крайних правых позициях оказываются нули, то они не выводятся. Действие манипулятора распространяется только на значение, непосредственно следующее за ним в потоке вывода.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.