Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике.doc
Скачиваний:
118
Добавлен:
02.05.2014
Размер:
1.53 Mб
Скачать

Обработка символьных данных

Вывод в C/C++

Выводом называется процедура переноса данных из памяти компьютера в другое место. Данные можно вывести на экран, отпечатать на принтере или сохранить на диске в виде файла. Кроме того, данные можно сохранить на магнитной ленте или послать по телефонной линии через модем или по факсу.

Вывод данных не означает, что они удаляются из памяти компьютера или что изменяется способ их хранения, компьютер просто копирует данные и посылает их куда-то еще.

Функции, используемые для вывода данных, зависят от типа данных и способа их представления. Наиболее прост вывод строк и символьных данных.

Функция puts()

Параметр (информация, заключенная в круглые скобки, которая выводится на экран) должен относиться к одному из следующих типов данных:

строковый литерал:

puts("Всем привет!");

строковая константа:

#define MESSAGE "Всем привет"

main()

{

puts(MESSAGE);

}

строковая переменная:

char greeting[]="Всем привет";

main()

{

puts(geering);

}

Использование любого другого типа констант, переменных или литералов приведет к ошибке компиляции. Строковый литерал, в отличие от имени константы или переменной, должен быть заключен в двойные кавычки.

Большинство компиляторов выполняют перевод строки после выполнения функции puts(). Это значит, что после того, как данные выведены на экран монитора, курсор автоматически переходит в начало следующей строки.

Функция putchar()

Функция putchar() предназначена для вывода единичного символа на экран. Параметром функции может являться:

символьный литерал:

putchar('H');

символьная константа:

#define INITIAL 'H'

main()

{

putchar(INITIAL);

}

символьная переменная:

main()

{

char letter;

letter='G';

putchar(letter);

}

С помощью функции putchar() можно отображать только один символ. Инструкция

putchar('Hi');

приведет к ошибке компиляции.

При выводе на экран символьного литерала или управляющего кода их следует заключать в одинарные кавычки.

Большинство компиляторов Си не имеет автоматического перевода строки после функции putchar(), и курсор остается сразу за выведенным символом, не переходя к началу следующей строки. Для перехода на новую строку вы должны ввести управляющий код \n.

Функция printf()

Функции puts() и putchar() используются довольно часто, но, к сожалению, их возможности несколько ограничены. Ни одна из них не может обеспечить вывод числовых данных, и обе они имеют только один аргумент (параметр). Это означает, что обе функции могут отобразить только один объект.

Языки Си и Си++ имеют более многостороннюю функцию, называемую printf(). Она позволяет выводить на дисплей данные всех типов и работать со списком из нескольких аргументов. Кроме того, при вызове функции printf() можно определить способ форматирования данных.

В простейшем случае функцию printf() можно использовать вместо функции puts() для вывода строки:

#define MESSAGE "Привет!"

main()

{

printf(MESSAGE);

printf("Добро пожаловать в мой мир! ");

}

Так же как и puts(), функция printf() будет выводить на экран строки, заключенные в кавычки, и значения строковых констант и переменных.

Для того чтобы иметь возможность форматировать данные всех типов, список параметров, передаваемый функции printf(), делится на две части. Первый параметр называется управляющей строкой или строкой формата. Этот параметр заключается в кавычки и указывает компилятору, в какой позиции строки должны появиться данные. Строка формата может содержать любой текст вместе с метками, которые называются указателями формата и определяют тип данных, а также их расположение.

Каждый указатель формата начинается с символа процента (%), после которого стоит буква, указывающая тип данных:

%d

целое число

%u

беззнаковое целое число

%f

вещественное число типа floatилиdouble

%e

вещественное число в экспоненциальной форме

%g

вещественное число, отображаемое по формату %fили %e, в зависимости от того, какая форма записи является более короткой

%c

символ

%s

строка

Таким образом, первая часть инструкции printf() записывается так:

printf("%d")

Знак процента говорит компилятору, что за ним последует указатель формата (чтобы отобразить сам символ процента, напишите его дважды: printf("%%");).

Буква d указывает компилятору, что следует отобразить целое число, записанное в десятичной системе счисления.

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

Простейший пример использования функции printf() приведен ниже:

printf("%d", 12);

В процессе выполнения этой инструкции значение 12 будет подставлено на место указателя формата. В нашем примере мы на самом деле передали библиотечной функции printf() два параметра: строку формата и числовой литерал12.

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

printf("Мне исполнилось %d лет", 12);

Строкой формата в этом примере является запись

"Мне исполнилось %d лет"

Указатель формата, %d, говорит о том, что мы хотим вставить число между словами "Мне исполнилось" и словом "лет". Когда компилятор подставит число12 на место указателя формата, мы увидим следующую фразу:

Мне исполнилось 12 лет

В этом примере функции передается одновременно и строковый литерал, и числовое значение.

В данном случае тот же результат можно получить, передавая всю фразу целиком, как параметр, одной из функций:

printf("Мне исполнилось 12 лет");

puts("Мне исполнилось 12 лет");

Но чтобы комбинировать текст с числовыми константами или переменными, следует использовать именно функцию printf() и указатели формата, как, например, в программе:

main()

{

int age;

age = 12;

printf("Мне исполнилось %d лет", age);

}

Эта программа отображает на экране строковый литерал и значение целочисленной переменной с помощью одной инструкции.

Функции printf() можно передать любое число параметров, чтобы отобразить несколько аргументов. При этом необходимо ставить указатель формата для каждого аргумента. Значения в списке данных должны располагаться в том же порядке, что и соответствующие указатели формата: первый пункт из списка данных подставляется на место первого указателя формата, второй— на место второго и так далее.

Функция printf() не переводит курсор автоматически на новую строку после отображения данных. После того как данные выведены на экран, курсор остается на той же строке, сразу за последним символом.

Если вы хотите перевести курсор на следующую строку, вы должны добавить в строку формата управляющий код «новая строка» \n:

printf("Стоимость составляет %f за %d штук\n", amount, count);

Форматированный вывод

Функцию printf() можно использовать для управления форматом данных. Определять величину пробелов и количество выводимых символов можно с помощью указателей ширины поля.

Без указателя ширины поля числа с плавающей точкой, например, будут выводиться с шестью знаками после точки. Поэтому в результате выполнения инструкции

printf("Стоимость составляет %f за

%d штук", amount, count);

и появляется строка:

Стоимость составляет 45.580000 за 5 штук

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

Стоимость составляет 45.579998 за 5 штук

Мы используем указатель ширины поля для того, чтобы придать желаемый вид числам и тексту, выводимым на экран.

Чтобы определить число знаков после точки, используется указатель %.nf, где число n определяет количество знаков.

Например, если написать:

printf("Стоимость составляет %.2f", amount);

то при выводе значения переменной с типом float оно будет иметь только два знака после точки:

Стоимость составляет 45.58

Можно также определить общую ширину поля, то есть размер (в символах) пространства, занимаемого выводимым числом, если использовать следующий формат:

%N.nf

где N— это общая ширина поля.

Если задать инструкцию

printf("Стоимость составляет %8.2f", amount);

появится строка

Стоимость составляет 45.58

с тремя дополнительными пробелами перед числом. Указатель ширины поля сообщает компилятору, что числовое значение должно быть, как бы втиснуто в «коробочку» размером восемь символов. Само по себе число занимает пять из них, включая точку, а неиспользованные символы отображаются на экран в виде пробелов, создавая перед числом пустое пространство.

Если ширина поля, заданного указателем, оказывается меньше количества символов, составляющих число, Си, тем не менее, выведет число целиком, просто игнорируя в данном случае указатель ширины поля. Выполнение инструкции

printf("Стоимость составляет %2.2f", amount);

приведет к появлению сообщения

Стоимость составляет 45.58

Указатель ширины поля может работать как с символьными, так и со строковыми данными. Дополнительные пробелы помещаются перед текстом, сдвигая строку к правому краю воображаемой «коробочки». Например, если строковая переменная, называемая message, имеет значение «Привет», то инструкция

printf("Я позвонил, чтобы сказать %8s", message);

отобразит на экране следующую строку

Я позвонил, чтобы сказать Привет

при выводе значения строковой переменной message перед ним появятся два дополнительных пробела.