![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Форматный вывод с помощью потоков ввода-выводаСодержание книги
Поиск на нашем сайте
Библиотека потоков ввода-вывода понимает множество команд форматного вывода. Листинг 1.6 демонстрирует возможность использования трех идентификаторов выходного потока — dec, hex, и oct — для вывода целых значений в десятичном, шестнадцатеричном и восьмеричном форматах. Листинг 1.6. CONVERT.CPP (использование форматного вывода в потоках ввода-вывода)
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; просмотров: 144; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.76.10 (0.008 с.) |