|
Программирование >> Дополнительные возможности наследования
в строке 12 установлен флаг showbase, что приводит к добавлению префикса Ох ко всем шестнадцатеричным значениям. В строке 16 ширина поля устанавливается равной 10. Поэтому выводимое значение сдвинуто вправо. В строке 20 ширина также устанавливается равной 10, однако применяется выравнивание влево. Этот момент хорошо виден в выводе профаммы. В строке 25 ширина остается равной 10, однако применяется вьфавнивание по ширине поля. Поэтому Ох вводится по левому краю поля, а Ь9 - по правому. Наконец, в сфоке 29 повторяются те же установки, но в этот раз функция setw( )используется не в отдельной сфоке, а в паре с оператором вывода ( ). Результат получается тот же. Сравнение потоков и функции printfQ Большинство версий компиляторов С-1-I- включают также стандартные библиотеки ввода-вывода языка С, позволяющие использовать для этого функцию printf(). Хотя использовать printf() немного проще, чем cout, применять ее не желательно. Функция printfO не обеспечивает должного конфоля за типами данных, поэтому можно легко ошибиться и отобразить число как символ или символ как число. Кроме того, функция printfO не поддерживает классы, поэтому ее трудно использовать для вывода данных объектов классов. Приходится задавать каждый член класса для printfO в отдельности. С другой стороны, эта функция значительно упрощает форматирование выводимых данных, так как позволяет вставлять спецификаторы форматирования в качестве параметров функции. Поскольку функция printfO все еще эффективно применяется в некоторых профаммах и пользуется популярностью у многих профаммистов, этот раздел посвятим краткому обзору ее использования. Для использования функции printfO необходимо включить в профамму файл заголовка stdio.h. В самой простой форме функция printfO принимает в качестве парамефа сфоку для форматированного вывода в виде текста, взятого в кавычки. Перед сфокой могут быть установлены самые различные наборы спецификаторов форматирования. В табл. 16.1 показаны наиболее часто используемые спецификаторы преобразований типов, начинающиеся всегда с символа %. ТоРдоцо 16.1. Снецнфцкатвры преоОразвваипА тииов Савяафвйййвр Ксйййьздвйсй дйя врввВрвзвввввя %s В строку %d В число типа integer %1 В число типа long integer %ld В число типа double %f В число типа float Кахсдый спецификатор преобразования может также дополняться установкой общего числа знаков в выводимом значении и числа знаков после десятичной запятой. Эта установка имеет вид десятичного значения с плавающей точкой, где символы сле- ва от точки устанавливают общее число знаков в выводимых значениях, а символы справа - число знаков после запятой. Например, спецификатор %5d задает вывод целочисленного значения длиной 5 знаков, а %l5.5f - вывод числа с плавающей запятой общей длиной в 15 знаков, пять из которых составляют дробную часть. Различные способы использования prlntfO показаны в листинге 16.15. Аистииг 16.IS. Вывод даииых с помощьт функции printfC) 2 3 4 5 6 7 #lnclude <stdio.h> int main() { printf( %s , hello world\ n ); char phrase = Hello again!\ n printf( %s ,phrase); 10 11 12 13 14 15 16 17 18 19 20 21 22 23 int X = 5; printf( %d\ n ,x); char phraseTwo = Heres some values: ; char рЬгазеТЬгее = and also these: ; int у = 7, z = 35; long longVar = 98456; float floatVar = 8.8f; printf( %s %d %d %s %ld %f\ n ,phraseTwo,y,z, phraseThree,longVar,floatVar); char *phraseFour = Formatted: ; printf( %s %5d %10d %10.5f\ n ,phraseFour,y,z,floatVar); return 0; > ,/ hello world * Hello again! Heres some values: 7 35 and also these: 98456 8.800000 Formatted: 7 35 8.800000 J,.- Первый раз функция prlntfO вызывается в строке 4 и имеет стандартную * форму; за именем функции printf следует спецификатор преобразования (в данном случае %s) и константная строка в кавычках, выводимая на экран. Спецификатор %s указывает, что в данный момент выводится текстовая строка, указанная далее, - hello world . Второй вызов функции printf в строке 7 аналогичен первому, но в данном случае вместо константной строки, заключенной в кавычки, используется указатель типа char. В третьем вызове printf() в строке 10 используется спецификатор вывода целочисленного значения, хранимого в переменной х. Еще более сложным оказывается четвертый вариант вызова функции printf(), показанный в строке 18. Здесь выводится сразу щесть значений. Каждому приведенному спецификатору отвечает свое значение, отделенное от остальных с помощью запятых. Наконец, в строке 21 в уже хорошо известной вам функции printfO используются спецификаторы форматирования, определяющие длину и точность выводимых значений. Многие считают, что форматирование вывода данных с помощью спецификаторов функции printfO намного проще, чем с помощью манипуляторов объекта cout. Ранее уже отмечались основные недостатки функции printfO - отсутствие строгого контроля за типами данных и невозможность объявления этой функции как друга или метода класса. Поэтому при необходимости распечатать данные различных членов класса нужно использовать явно заданные методы доступа к членам класса. ООобщвнив MBBiogoB управлвния выводом данных в программах на (;++ Для форматирования вывода данных в С++ можно использовать комбинации специальных символов, манипуляторов и флагов. В выражениях с объектом cout используются следующие специальные символы: \п - новая строка; \г - возврат каретки; \t - табуляция; \\ - обратный слеш; . \ddd (число в восьмеричном коде) - символ ASCII; \а -звуковой сигнал (звонок). Пример выражения вывода строки: co t ЛаАп error occured\t Указанное выражение не только выводит сообщение об ошибке на экран компьютера, но подает предупреждающий звуковой ситал и выполняет переход к следующей позиции табуляции, С оператором cout используются также манипуляторы. Однако для использования большинства манипуляторов нужно включить в профамму файл iomanip. п. Далее вашему вниманию представлен список манипуляторов, не требующих включения iomanip.h: ! lush - очищает буфер вывода; endl - вставляет символ разрыва строки и омищает буфер вывода; oct - устанавливает восьмеричное основание для выводимых чисел; dec - устанавливает десятичное основание для выводимых чисел; hex - устанавливает шестнадцатеричное основание для выводимых чисел. А теперь приведем набор манипуляторов, для которых необходимо включение iomanip.h: setbase (основание) - устанавливает основание для выводимых чисел (О = десятичная, 8 = восьмеричная, 10 = десятичная, 16 = шестнадцатеричная); setw (ширина) -устанавливает минимальную ширину поля вывода; setfill (символ) -устанавливает символ заполнения незанятых позиций поля вывода; setprecision (точность) - устанавливает число знаков после плавающей запятой; setiogflags (флаг) -устанавливает один или несколько флагов;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |