Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Форматный вывод с помощью потоков ввода-выводаСодержание книги
Поиск на нашем сайте
Библиотека потоков ввода-вывода понимает множество команд форматного вывода. Листинг 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 выводит готовую строку в системный стандартный вывод. Область видимости и объявление переменных Например, если существует глобальная переменная int count, функция может объявить локальную переменную с тем же именем, не вызвав при этом сообщения компилятора об ошибке: Int count; // Глобальная переменная Void AnyFunction() {int count; // Локальная переменная } Область видимости локальной переменной count действует в пределах объявленной функции. В этой функций локальная переменная count делает невозможным доступ к глобальной переменной с тем же именем. Для решения этой проблемы в С++ можно использовать оператор разрешения области видимости::.
Перепишем приведенную выше функцию следующим образом:
int count; //Глобальная переменная void AnyFunction(){ int count; //Локальная переменная count = 1234; // Присвоить значение локальной переменной ::count = 4321; // Присвоить значение глобальной переменной count }
Теперь она присваивает значение 1234 локальной переменной count и 4321 — глобальной. Выражение::count указывает С++, что используется внешняя переменная count, а не локальная (рис. 1.1).
Рис. 1.1. Оператор разрешения области видимости может открыть доступ к скрытой глобальной переменной Листинг 1.8 демонстрирует использование оператора разрешения видимости С++. Этот листинг дополнительно иллюстрирует еще одно свойство С++: объявления С++ можно вводить в любой точке программы, а не только глобально или в начале функции, как в С. Конечно, как и в C, вы должны объявлять переменные до их использования. Листинг 1.8. SCOPE.CPP (использование оператора разрешения видимости) 1: #include <iostream.h> 2: 3: int k = 100; // Глобальная переменная 4: main() 5: { 6: int i = 200; // Локальная переменная 7: 8: cout << "Global k == " << k << \n"; 9: cout << "Local i == " << i << '\n'; 10: 11: { 12: int к = 300; 13: cout <<Local к *= " << k << '\n'; 14: cout «"Global k == " << ::k << '\n'; 15: } 16: return 0; 17: } В строке 3 объявляется и инициализируется значением 100 глобальная переменная k; а в строке 7 объявляется переменная i, локальная в функции main(). Строки 9-10 выводят значения k и i. Нет необходимости использовать оператор разрешения видимости в строке 9, так как была объявлена только одна переменная k. Строки 11-15 содержат новый блок-оператор, заключенный внутри функции main(). Хотя это и необычно для практики программирования, блок может быть размещен в другом блоке (строки 11 и 15). Конечно, на практике подобные вложенные блоки принадлежат операторам if, while и им подобным. Внутри вложенного блока в строке 12 объявляется новая переменная с именем k, инициализированная значением 300.
В отличие от С, С++ позволяет объявлять и инициализировать переменные в любом месте блока-оператора.
Теперь мы имеем две переменных k: глобальную, объявленную в строке 3, и локальную, объявленную в строке 12. Поскольку новая локальная k скрывает глобальную переменную с тем же именем, в строке 13 отображается значение локальной переменной. Чтобы получить доступ к глобальной переменной, используется оператор разрешения области видимости, как показано в строке 14.
|
|||||
Последнее изменение этой страницы: 2016-08-01; просмотров: 137; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.139.164 (0.008 с.) |