Шаг 95.
Microsoft Visual C++ 2010. Язык С/С++.
Ввод и вывод в языках C и C++. Стандартный вывод cout

    На этом шаге мы рассмотрим особенности реализации стандартного вывода.

    Объект cout направляет данные в буфер-поток, связанный с объектом stdout, объявленным в файле stdio.h. По умолчанию стандартные потоки С и C++ синхронизированы.

    При выводе данные могут быть отформатированы с помощью функций-членов класса или манипуляторов. Их перечень приводится в таблице 1.


   Примечание. Манипуляторы, начинающиеся с "no" (noshowpos и т. п.), имеют обратное действие по отношению к манипуляторам с такими же именами, но без приставки "no". В столбце "Описание" у таких манипуляторов проставлены пробелы.

Таблица 1. Манипуляторы и функции стандартного ввода/вывода в C++
Манипуляторы Функции-члены класса Описание
showpos setf(ios::showpos) Выдает знак плюс у выводимых положительны: чисел
noshowpos unsetf(ios::showpos)  
showbase setf(ios::showbase) Выдает базу системы счисления в выводимом числе в виде префикса
noshowbase unsetf(ios::showbase)  
uppercase setf(ios::uppercase) Заменяет символы нижнего регистра на символы верхнего регистра в выходном потоке
nouppercase unsetf(ios::uppercase)  
showpoint setf(ios::showpoint) Создает символ десятичной точки в сгенерированном потоке с плавающей точкой (в выводимом числе)
noshowpoint unsetf(ios::showpoint)  
boolalpha setf(ios::boolalpha) Переводит булевый тип в символьный
noboolalpha unsetf(ios::boolalpha)  
unitbuf setf(ios::unitbuf) Сбрасывает буфер вывода после каждой операции вывода
nounitbuf unsetf(ios::unitbuf)  
internal setf(ios::internal, ios::adjustfield) Добавляет символы-заполнители к определенным внутренним позициям выходного потока (речь идет о выводе числа в виде потока символов). Если такие позиции не определены, поток не изменяется
left setf(ios::left, ios::adjustfield) Добавляет символы-заполнители с конца числа (сдвигая число влево)
right setf(ios::right, ios::adjustfield) Добавляет символы-заполнители с начала числа (сдвигая число вправо)
dec setf(ios::dec, ios::basefield) Переводит базу вводимых или выводимых целых чисел в десятичную (введенные после этого манипулятора данные будут выводиться как десятичные)
hex setf(ios::hex, ios::basefield) Переводит базу вводимых или выводимых целых чисел в шестнадцатеричную (введенные после этого манипулятора данные будут выводиться как шестнадцатеричные)
oct setf(ios::oct, ios::basefield) Переводит базу вводимых или выводимых целых чисел в восьмеричную (введенные после этого манипулятора данные будут выводиться как восьмеричные)
fixed setf(ios::fixed, ios::floatfield) Переводит выход с плавающей точкой в выход с фиксированной точкой
scientitic setf(ios::scientific, ios::floatfield) Выдает числа с плавающей точкой в виде, используемом в научных целях: например, число 23 450 000 будет записано как 23.45e6
  setbase(int base) Преобразует ввод целых чисел в тип base, где параметр base может быть одним из чисел 8, 10 или 16
fill(c) setfill(char_type c) Задает символ заполнения при выводе данных
precision(n) setprecision(int n) Задает точность вывода дан ных (количество цифр после точки)
setw(int n) width(n) Задает ширину поля для выводимых данных (количество символов)
endl   Вставляет символ новой строки ('\n') в выходную последовательность символов и сбрасывает буфер ввода
ends   Вставляет символ '\0' в выходную последовательность символов
flush flush() Сбрасывает буфер вывода
ws   Задает пропуск пробелов при вводе

    Значения по умолчанию:

    Ниже приведен пример программы с применением объекта сout (все пояснения можно найти в комментариях). Результат работы программы представлен на рисунке 1.

// 95_1.cpp: главный файл проекта.

#include "stdafx.h"
#include <iostream>
#include <iomanip> //включение манипуляторов
#include <conio.h>

#include <clocale>     //обязательно для функции setlocale()

using namespace System;
using namespace std; 

void main()
{
	setlocale(LC_ALL, "Russian"); //функция setlocale() с аргументами
	                             //для корректного вывода кириллицы

	int i ; float f;
	cout << "Задайте значения i и f >" << endl;
	// чтение целого числа и числа с плавающей точкой с устройства stdin 
	cin >> i >> f;
	// вывод целого и переход на новую строку 
	cout << "Вывод целого числа: " << i << endl;
	// вывод числа с плавающей точкой и переход на новую строку 
	cout << "Вывод числа с плавающей точкой: " << f << endl;
	// вывод в шестнадцатеричной системе счисления
	cout << "Вывод целого числа в шестнадцатеричной системе счисления: " << 
            hex << i << endl;
	// вывод в восьмеричной и десятичной системах счисления
	cout << "Вывод целого числа в восьмеричной и десятичной системах счисления: " 
            << oct << i << " " << dec << i << endl;  
	// вывод i с указанием его знака
	cout << "Вывод целого числа со знаком: " << showpos << i << endl; 
	// вывод i в шестнадцатеричной системе счисления
	cout << "Вывод целого числа в шестнадцатеричной системе счисления: " << 
            setbase(16) << i << endl;
	// вывод i в десятичной системе счисления и 
	// дополнение справа символом @ до ширины  в 20 
	// символов (заполнение начинается от правой границы к левой). 
	// Если вы введете, например, 45, то выведется 45@@@@@@@@@@@@@@@@@@ 
	cout << "Форматный вывод целого числа: " << setfill('@') << 
            setw(20) << left << dec << i << endl;
	// вывод того же результата в том же формате,
	// но с использованием функций вместо манипуляторов
	cout << "Форматный вывод целого числа (2-й способ): ";
	cout.fill('@'); 
	cout.width(20); 
	cout.setf(ios::left, ios::adjustfield);
	cout.setf(ios::dec,  ios::basefield);
	cout << i << endl;
	// вывод f в научной нотации с точностью 10 цифр
	cout << "Вывод в научной нотации (точность 10 цифр): " << scientific 
            << setprecision(10) << f << endl;
	// изменение точности до 6 цифр
	cout << "Вывод в научной нотации (точность 6 цифр): ";
	cout.precision(6);
	// вывод f и возврат к нотации с фиксированной точкой 
	cout << f << fixed << endl; 
	_getch(); 
}
Архив проекта можно взять здесь.


Рис.1. Результат работы приложения

    На следующем шаге мы рассмотрим стандартный ввод cin.




Предыдущий шаг Содержание Следующий шаг