Листинг 1. Исходный текст программы OUT1.CPP

Форматированный потоковый вывод

C++ имеет целое семейство гибких библиотек функций ввода/вывода. Разработчикам языка было ясно, что функции ввода/вывода из STDIO.H, унаследованные из С, имеют ограничения при работе с классами (вы узнаете больше о классах в главе 8)., В результате в C++ было введено понятие потоков. Вспомним, что потоки, которые уже существовали в С, означают последовательность данных, передаваемых из одной части компьютера в дру­гую. В программах, рассматриваемых ранее, вы видели операцию помещения в поток «, например — в стандартный поток вывода, cout. Встречалась вам и операция извлечения из потока », применяемая к стандартному потоку ввода, cin. В этом разделе мы познакомимся с потоковыми функциями width и precision, используемыми при форматировании вывода. Библиотеки потоков C++ содержат большое количество таких функций, позволяющих настроить ваш вывод.

Функция width задает ширину поля вывода. Общая форма использования функции width с потоком cout:

cout.width (widthOf Output);

Функция precision определяет количество значащих цифр после точки для чисел с пла­вающей точкой. Общая форма использования функции precision с потоком cout:

cout.precision(numberOfDigits) ;

Обратимся к примеру, программе OUT1.CPP, исходный текст которой при­веден в листинге 1. Программа, в которую ничего не вводится, просто выво­дит форматированные целые числа, числа с плавающей точкой и символы с использованием функций width и precision.

// Программа иллюстрирует потоковый форматированный вывод в C++
// с использованием функций width и precision
#include <iostream.h>
 
int main()
{
int anInt = 67;
unsigned char aByte = 128;
char aChar = '@';
float aSingle = 355.1112;
double aDouble = 1.131112e+002;
 
// Вывод простых выражений
cout.width(3); cout << int(aByte) << " + ";
cout.width(2); cout << anInt << " = ";
cout.width(3); cout << (aByte + anInt) << endl;
 
cout.precision(3); cout << aSingle << " / ";
cout << aDouble << " =";
cout.width(7); cout.precision(4); cout << (aSingle / aDouble) << endl;
 
cout << "Символьная переменная aChar: "
<< aChar << endl;
return 0;
}

 

Пример программной сессии:

Введите три числа через пробел: 123

Сумма чисел = 6

Среднее этих чисел = 2

Введите три символа: ABC

Вы ввели символы 'A', 'B', 'C'

Введите число, символ, и число: 12A34.4

Вы ввели 12 A 34.4

Введите символ, число и символ: A3.14Z

Вы ввели A 3.14 Z

 

В программе из листинга 2 объявляется четыре переменных типа double и три переменных типа char. Оператор вывода в строке 10 предлагает вам ввести три числа. Оператор ввода в строке 11 помещает введенные вами числа в переменные х, у и z. He забывайте, что при вводе чисел их нужно разделять пробелами. Либо вводите каждое число с новой строки. Первое введенное вами число будет помещено в переменную х, второе — в у, а третье окажется в переменной z. Данные в переменные заносятся в том порядке, в котором пере­менные перечислены в операторе ввода в строке 11. Оператор в строке 12 вычисляет сумму значений переменных х, у и z. Оператор вывода в строках 13 и 14 выводит сумму и среднее значение введенных вами величин.

Оператор вывода в строке 15 предлагает вам ввести три символа. Оператор (ввода в строке 16 последовательно размещает введенные символы в перемен­ных с1, с2, с3. Использовать пробел для разделения вводимых символов не обязательно. Например, вы можете ввести данные и таким образом: 1А2, Bob и 1 D d. Оператор вывода в строках 17—19 выводит введенные вами символы, разделенные пробелами и заключенные в одинарные кавычки.

Оператор вывода в строке 20 предлагает вам ввести число, символ и число. Оператор ввода в строке 21 помещает ваши данные в переменные х, с1 и у. Пробел-разделитель здесь нужен только в том случае, если символ может быть интерпретирован как часть числа. Например, если вам нужно ввести число 12, символ «точка» и число 55, вам нужно набрать на клавиатуре 12 . 55. Вводимый символ «точка» лучше «заключить» в пробелы, чтобы быть уверенным, что поток вода не воспримет эту точку как точку, разде­ляющую в вещественном числе целую и дробную части. Оператор вывода в строке 22 выводит введенные вами данные разделенные пробелами.

Оператор вывода в строке 23 предлагает вам ввести символ, число и символ. Оператор ввода в строке 24 последовательно размещает введенные значения в переменных с1, х, с2. Пробел-разделитель здесь нужно исполь­зовать только в том случае, если символ может быть интерпретирован как часть числа. Например, если вам нужно ввести символ «-», число 12 и цифру 0, вам нужно набрать на клавиатуре 12 0. Оператор вывода в строке 25 выводит введенные вами данные, разделяя их пробелами.