Форматный вывод с помощью потоков ввода-вывода
Библиотека потоков ввода-вывода понимает множество команд форматного вывода. Листинг 1.6 демонстрирует возможность использования трех идентификаторов выходного потока — dec, hex, и oct — для вывода целых значений в десятичном, шестнадцатеричном и восьмеричном форматах. Листинг 1.6. CONVERT.CPP (использование форматного вывода в потоках ввода-вывода) 1:#include <iostream.h> 2:#include <stdlib.h> 3: 4:#define SIZE 35 5: 6:main() 7:{ 8: int value; 9: char s[SIZE]; 10: 11: cout << "Value? "; 12: cin.get(s, SIZE, '\n'); 13: value = atoi(s); 14: cout << "Decimal=" << dec << value 15: << "Hexadecimal=Ox" << hex << value 16: << "0ctal=0" << oct << value <<'\n'; 17: return 0; 18: } Строки 14-16 выводят в один и тот же поток различные данные. Одни из них — строки символов. Другие — целые числа. Идентификаторы dec, hex, и oct, выведенные в поток непосредственно перед выводом значения, изменяют текущий формат вывода выходного потока.
Кроме того, можно указать и ширину вывода с помощью вызова cout.width(n), где n — нужное число позиций.
Например, можно вывести значение в 15 позициях с выравниванием по правому краю, написав следующий участок кода: int value = 1234;// Форматируемое значение cout « value; // Вывод значения в 15 позициях Иногда бывает неудобно пользоваться форматным выводом библиотеки потоков. Ее сложные операторы могут быть трудными для чтения. Судя по обнародованным исходным текстам, программисты-эксперты в С++ предпочитают смесь методов форматирования вывода ANSI С и С++. Листинг 1.7 — типичный случай такого подхода, он полностью аналогичен CONVERT.CPP. Листинг 1.7. CONVERT2.CPP (альтернативный вариант форматного вывода) 1: #include <iostream.h> 2: #include <stdio.h> 3: #include <stdlib.h> 4: 5: #define SIZE 35 6: 7: main() 8:{ 9 int value; 10: char s[SIZE]; 11: char buffer[80]; 12: 13: cout « "Value? "; 14: cin.get(s, SIZE, '\n'); 15: value = atoi(s); 16: sprintf(buffer,"Decimal=%d Hexadecimal=%#x Octal=%#o\n", 20: } Сложный оператор вывода библиотеки потоков из CONVERT.CPP заменен вызовом sprintf() в строках 16-17. Функция sprintf(), описанная в STDLIB.H, готовит символьную строку согласно тем же правилам, которые используются в printf() и других подобных функциях. Строка 16 указывает форматы %d (десятичный), %#x (шестнадцатеричный), %#o (восьмеричный) для вставки данных в символьный буфер в соответствующем порядке. Простой оператор вывода в строке 18 выводит готовую строку в системный стандартный вывод. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|