Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

103 Глава 2

может принимать при ее вызове ноль, один или более аргументов. Когда вам нужно передать более одного аргумента, их следует разделять запятыми. Функции вывода класса Console заслуживают более детального рассмотрения, поэтому я опишу их подробно.

Вывод командной строки C++/CLI

Вы увидели в последнем примере, как можно использовать методы

идля вывода строк или других элементов данных

в командную строку. Между их скобками можно поместить переменную любого из ти- пов, которые вам встречались в этой книге до сих пор, и ее значение будет выведено в командную строку. Например, вы можете написать следующие операторы для выво- да выходной информации о количестве пакетов:

Выполнение этих операторов даст следующий вывод:

Весь вывод уместился в одной строке, потому что в первых двух операторах ис- пользуется функция Write (), которая не выводит символ новой строки после дан- ных. В последнем операторе применяется функция WriteLine (), которая при выводе присоединяет символ новой строки к переданным данным, поэтому весь последую- щий вывод окажется в новой строке.

Выглядит довольно утомительным использовать целых три оператора, чтобы по- лучить одну строку вывода, поэтому не удивительно, что предусмотрен и другой спо- соб. Это средство связано с форматированием вывода в командной строке программ .NET Framework, и об этом мы поговорим в следующем разделе.

Специфика C++/CLI форматирование вывода

Обе функции — и|, и— имеют сред-

ства управления форматом вывода, и этот механизм работает совершенно одинаково в обеих функциях. Проще всего понять его на примере. Во-первых, посмотрим, как можно одним оператором получить вывод, который в предыдущем примере форми- ровался тремя операторами:

Здесь второй оператор даст тот же вывод, что вы видели в предыдущем разделе. Первый аргумент— строка Ь"Имеется {0} пакетов. ", в кото-

рой фрагмент " {0}" отмечает место, куда будет помещен второй аргумент. Этот фраг- мент заключает в себе форматную строку, применяемую для вывода второго аргумен- та, хотя в данном случае она предельно проста, и состоит из одного нуля. Аргументы, следующие в функцииза первым, пронумерованы по поряд-

ку, начиная с нуля:

Данные, переменные и вычисления 104

Таким образом, ноль между фигурными скобками в предыдущем фрагменте кода указывает на то, что аргумент packageCount должен заменить {0} в строке-аргументе при выводе ее на консоль.

Если вы захотите вывести еще и вес пакетов вместе с числом, то можете написать так:

Теперь оператор вывода имеет три аргумента, и ко второму и третьему в формат- ной строке выполняется обращение по номерам 0 и 1 соответственно. Поэтому это даст следующий вывод:

Вы также можете написать оператор, который выведет два последних аргумента в обратном порядке, как здесь:

Теперь в форматной строке 0 ссылается на переменную packageWeight, а 1 — на packageCount; вывод получится точно таким же, как прежде.

У вас также есть возможность специфицировать, как будут представлены данные в командной строке. Предположим, что вам нужно вывести значение с плавающей точ- кой packageWeight с двумя десятичными разрядами после точки. Это можно сделать следующим образом:

В подстроке 1: F2 двоеточие отделяет значение индекса — 1, идентифицирующее аргумент, от следующей за ним спецификации формата — F2. Буква F в спецификации формата указывает, что вывод должен быть в форме "±ddd.dd..." (где d представляет десятичную цифру), а 2 — количество разрядов после точки. Вывод этого оператора будет таким:

Вообще вы можете писать спецификацию формата в виде {n,w:Ахх}, где п — зна- чение индекса, указывающее номер аргумента, следующего за форматной строкой, w — необязательная спецификация ширины поля, А — односимвольная спецификация формата значения, а хх — необязательное одно- или двузначное число, задающее точ- ность вывода значения. Спецификация ширины поля — целое со знаком. Значение будет выровнено вправо в поле w, если ширина положительна, и влево — если отрица- тельна. Если значение занимает меньше знаков, чем указано в w, то вывод дополняет- ся пробелами; если значение не помещается в ширину w, то спецификация ширины игнорируется. Вот еще один пример:

Количество пакетов выводится в поле шириной 3 знака, а вес — в поле шириной 5, поэтому в результате получим: