Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ОАиП.docx
Скачиваний:
127
Добавлен:
09.03.2016
Размер:
139.71 Кб
Скачать

8.Потоковый ввод/вывод данных.

В языке С определены три стандартных потока ввода/вывода:

  1. stdin – стандартное устройство ввода (клавиатура);

  2. stdout – стандартное устройство вывода (экран);

  3. stderr – стандартное устройство вывода сообщения об ошибках (также экран).

Простейший ввод/вывод:

  • getch()– ввод одного символа без отображения его на экране;

  • getche()– ввод одного символа с отображением его на экране;

  • putchar(int c)– вывод одного символа на экран.

Все эти функции требуют включения заголовочного файла<conio.h>.

Все остальные функции ввода/вывода определены в заголовочном файле<stdio.h>.

Для ввода и вывода на экран используются функции scanf и printf соответственно, прототипы которых имеют следующий вид: int scanf (char *format, ...); int printf(char *format, ...);

Вывод осуществляется функцией printf, которая имеет следующий синтаксис: printf(<строка описания форматов> [, <список вывода>]);

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

Спецификации формата начинаются с символа % и заканчиваются символом, определяющим тип выводимого значения. Кроме того, спецификации формата могут содержать символы и цифры для управления видом выводимого значения. Список вывода состоит из переменных и/или констант, значения которых должны быть выведены. Количество спецификаций формата должно быть равно количеству выводимых значений, которые указываются в списке вывода. Если это условие не будет соблюдаться, выполнение функции может привести к непредсказуемым результатам.

Ввод осуществляется функцией scanf, которая имеет следующий синтаксис: scanf(<строка описания форматов> [, <список ввода>]);

Строка описания форматов состоит из набора спецификаций формата, таких же, как для функции printf. Список ввода состоит из адресов переменных, куда будут заноситься вводимые значения. Адрес переменной вычисляется с помощью унарной операции &. Количество спецификаций формата должно быть равно количеству вводимых значений, которые указываются в списке ввода.

Функция scanf возвращает количество успешно введенных и преобразованных значений. Функция printf возвращает количество символов, записанных в выходной поток.

9.Использование манипуляторов при вводе/выводе данных.

Система ввода/вывода С++ включает второй способ изменения параметров форматирования по­тока. Для этого используются специальные функции, называемые манипуляторами (manipulators), которые могут включаться в выражения ввода/вывода. Стандартные манипуляторы показаны в таблице.

Манипулятор

Назначение

Ввод/вывод

dec

Ввод/вывод данных в десятичной форме

ввод и вывод

endl

Вывод символа новой строки с передачей в поток всех данных из буфера

вывод

ends

Вывод нулевого символа

вывод

flush

Передача в поток содержи­мого буфера

вывод

hex

Ввод/вывод данных в шест­надцатиричной системе

ввод и вывод

oct

Ввод/вывод данных в восьме­ричной форме

ввод и вывод

resetiosflags(long f)

Сбрасывает флаги, указанные в f

ввод и вывод

setbase(int base)

Устанавливает базу счисле­ния равной параметру base

вывод

setfill(int ch)

Устанавливает символ заполнения равным ch

вывод

setiosflags(long f)

Устанавливает флаги, указанные в f

ввод и вывод

setprecision(int p)

Устанавливает число цифр после запятой

вывод

setw(int w)

Устанавливает ширину поля равной w

вывод

ws

Пропускает начальный символ-разделитель

ввод

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

#include <iostream.h> #include <iomanip.h> int main() { cout << setiosflags(ios::fixed); cout << setprecision (2) << 1000.243 << endl; cout << setw (20) << "Hello there."; return 0; }

Программа выводит следующие данные: 1000 .24 Hello there.

Обратим внимание, как манипуляторы появляются в последовательности операторов ввода/вывода. Когда манипуляторы не имеют аргументов, как манипулятор endl в этой программе, за ними не следуют скобки. Причина этого в том, что оператору << передается адрес манипулятора.