Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Видеоадаптеры / CH12
.HTM<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<TITLE>12</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.04z">
</HEAD>
<BODY BGCOLOR="#ffffff">
<H1><A NAME="ch12">12. Стандартные функции вывода языка Си</A>
</H1>
<P>
<A HREF="#ch12_1" >12.1. Вывод на дисплей через стандартный выходной поток</A>
<P>
<A HREF="#ch12_2" >12.2. Вывод символов на консоль</A>
<P>
В главе рассмотрены основные стандартные функции вывода текстовых
данных на экран (через стандартный выходной поток и через консоль).
К ним относятся функции putc, putchar, putch, puts, cputs, printf
и cprintf.
<P>
Хотя эти функции не входят в определение языка Си, по причинам
совместимости их формат одинаков для всех трансляторов с языка
Си.
<H2><A NAME="ch12_1">12.1. Вывод на дисплей через стандартный
выходной поток</A></H2>
<H3>Функции putchar() и putc()</H3>
<P>
Эти функции помещают один символ в текущую позицию выходного потока.
Прототипы функциий представлены ниже:
<PRE>
<FONT COLOR=#000080>int putc( int ch, FILE *stream );
int putchar( int ch );</FONT>
</PRE>
<P>
Функция putc() отличается от putchar() наличием второго аргумента,
который определяет выходной поток, в который помещается символ.
Она может использоваться и для записи символов в открытый файл
и для записи в стандартные потоки ввода-вывода. В частности, если
второй аргумент функции равен константе stdout, то она эквивалентна
функции putchar() и выводит символ в стандартный выходной поток.
Этот поток может идти на экран дисплея или в файл, если используется
свойство переназначения потока. Фактически функция putchar() является
макроопределением:
<PRE>
<FONT COLOR=#000080>#define putchar(_c) putc((_c),stdout)</FONT>
</PRE>
<P>
Первые параметры обеих функций совпадают по смыслу и задают ASCII-код
выводимого символа (не смотря на то, что переменная ch целого
типа, используется только ее младший байт). При этом функции обрабатывают
управляющие символы. Список управляющих символов приведен в таблице
13.1:
<HR>
<PRE>
<FONT COLOR=#000080>Символ Код ASCII Значение
\a 07h звуковой сигнал
\b 08h перемещение назад
\f 0Ch переход к новой
странице
\n 0Ah новая строка
\r 0Dh возврат каретки
\t 09h горизонтальная
табуляция
\v 0Bh вертикальная
табуляция</FONT>
</PRE>
<HR>
<HR>
<PRE>
<FONT COLOR=#000080>\' 27h символ кавычки
\" 22h двойная кавычка
\\ 5Ch обратный слеш
\% 25h знак процента</FONT>
</PRE>
<HR>
<P>
Таблица 13.1 Управляющие символы.
<P>
Функции возвращают ASCII-код выведенного символа, а в случае ошибки
возвращают константу EOF. Чтобы конкретизировать ошибку можно
воспользоваться функцией ferror().
<PRE>
<FONT COLOR=#000080>// использование функци putchar()
#include <stdio.h>
void main(void) {
char *ptr,
out_str[] = "\aputchar\nputc\a";
for(ptr = out_str; *ptr; putchar(*(ptr++)) );
}</FONT>
</PRE>
<P>
Включаемый файл stdio.h содержит спецификации функций putchar()
и putc(). Следовательно, этот файл необходимо включать во все
программы, использующие данные функции.
<H3>Функция puts()</H3>
<P>
Функция puts() позволяет записать строку в стандартный выходной
поток stdout. Строка должна оканчиваться нулем (символ '\0').
Этот символ не помещается в выходной поток. Вместо него записывается
упрвляющий символ '\n', который переводит курсор в начало новой
строки.
<P>
Функция имеет следующий прототип:
<PRE>
<FONT COLOR=#000080>int puts( char *string );</FONT>
</PRE>
<P>
Единственный параметр функции содержит указатель на отображаемую
строку. При успешном выполнении функция возвращает ноль. Если
же произошла ошибка, то возвращается ненулевая величина.
<P>
При использовании функции puts() необходимо включить директивой
include файл stdio.h, содержащий спецификацию этой функции.
<PRE>
<FONT COLOR=#000080>// использование функци puts
#include <stdio.h>
void main(void) {
puts("Работает функция puts!");
}</FONT>
</PRE>
<H3>Функция printf()</H3>
<P>
Наиболее универсальной стандартной функцией, обеспечивающей запись
в выходной поток stdout, является функция printf(). Она производит
вывод на экран дисплея строк, отдельных символов и чисел в различных
форматах.
<P>
Приведем прототип функции printf():
<PRE>
<FONT COLOR=#000080> int printf( char *format [,argument]... );</FONT>
</PRE>
<P>
Первый аргумент функции содержит указатель на управляющую строку,
которая может состоять из:
<UL>
<LI>непосредственно выводимых символов,
<LI>управляющих символов,
<LI>спецификаторов формата.
</UL>
<P>
Непосредственно выводимые символы и управляющие символы помещаются
в выходной поток без изменения.
<P>
Если управляющая строка содержит спецификаторы формата, то каждому
спецификатору должен соответствовать один аргумент, следующий
за управляющей строкой. Аргументы представляют собой переменные
или константы, которые преобразуются согласно соответствующих
им спецификаторов формата и затем также помещаются в выходной
поток.
<P>
Различные спецификаторы формата перечислены в таблице 13.2:
<HR>
<PRE>
<FONT COLOR=#000080>Спецификатор формата Тип данных
%d, %i целое десятичное число
%s текстовая строка
%c один символ
%e, %E число с плавающей точкой в
экспоненциальной форме
%f число с плавающей точкой в
десятичной записи
%u целое десятичное число без
знака
%o целое восьмеричное число без
знака
%x, %X целое шестнадцатиричное число без знака
%g, %G либо %e, либо %f в
зависимости от того, запись в
каком формате короче
%p значение указателя
%n число символов</FONT>
</PRE>
<HR>
<P>
Таблица 13.2 Спецификаторы формата функции printf().
<P>
В более общем случае, в спецификаторе формата между символом '%'
и символом, определяющим тип преобразования можно разместить флаги
и префиксы типов:
<PRE>
<FONT COLOR=#000080>% [флаг] [ширина] [.точность] [префикс типа] символ преобразования</FONT>
</PRE>
<P>
Флаги приведены в таблице 13.3, а префиксы типов в таблице 13.4.
<P>
Поле [ширина] задает мимнимальную ширину поля, используемую при
печати строки или числа. Если это число или строка не помещаются
в поле целиком, то ширина поля увеличивается.
<P>
Поле [.точность] определяет для чисел количество отображаемых
после запятой цифр, а для строк - максимальное число символов
в строке.
<HR>
<PRE>
<FONT COLOR=#000080>Флаг Значение
- выравнивание по левой границе
+ перед числом помещается его знак
пробел (' ') перед данными помещается пробел</FONT>
</PRE>
<HR>
<P>
Таблица 13.3 Флаги.
<HR>
<PRE>
<FONT COLOR=#000080>Префикс типа Значение
F дальний указатель
N ближний указатель
h короткое целое
l, L длинное целое</FONT>
</PRE>
<HR>
<P>
Таблица 13.4 Префиксы типов.
<P>
Функция printf() возвращает число напечатанных ею символов или
в случае ошибки - отрицательную величину.
<P>
Использование различных спецификаторов формата демонстрируется
следующим примером:
<PRE>
<FONT COLOR=#000080>// при использовании printf также необходим файл stdio.h
#include <stdio.h>
void main(void) {
int char_count;
char ptr[] = "строка";
printf("\n%23d \n%e \n%.3E \n%f \n%+g \n%-23G \n\n",
1111, 0.01, 0.01, 0.01, 0.01, 0.0000001);
printf("%s%n", ptr, &char_count);
printf("\n\nПредыдущая функция вывела %d символов.\n\n",
char_count);
printf("Это %s, расположенная по адресу %Lp.\n\a", ptr, ptr);
}</FONT>
</PRE>
<H2><A NAME="ch12_2">12.2. Вывод символов на консоль</A></H2>
<H3>Функция putch()</H3>
<P>
Функция производит запись символа на консоль без буферизации.
Прототип функции:
<PRE>
<FONT COLOR=#000080>int putch( int ch );</FONT>
</PRE>
<P>
Параметр функции - ch - содержит код ASCII выводмого символа.
Заметим, что используется только младший байт параметра функции.
<P>
Функция putch() возвращет ASCII-код записанного символа или, в
случае возникновения ошибки, константу EOF.
<P>
При использовании функции putch() необходимо включить в программу
файл conio.h, который содержит ее спецификацию.
<H3>Функция cputs()</H3>
<P>
Функция производит запись строки символов, оканчивающихся нулем,
на консоль. Отметим, что в отличие от функции puts() курсор не
переводится на новую строку.
<P>
Приведем прототип функции cputs():
<PRE>
<FONT COLOR=#000080>int cputs( char *string );</FONT>
</PRE>
<P>
Единственный параметр функции содержит указатель на отображаемую
строку. При успешном выполнении функция возвращает ноль. Если
произошла ошибка, то возвращается ненулевая величина.
<P>
При использовании функции cputs() необходимо включить директивой
include файл conio.h, содержащий спецификацию этой функции.
<H3>Функция cprintf()</H3>
<P>
Функция обеспечивает вывод на экран дисплея строк, отдельных символов
и чисел в различных форматах непосредственно на консоль. При этом
для вывода отдельных символов использется функция putch().
<P>
Приведем прототип функции cprintf():
<PRE>
<FONT COLOR=#000080>int cprintf( char *format [,argument]... );</FONT>
</PRE>
<P>
Ее параметры соответствуют параметрам функции printf(), описанной
выше. Единственное ее отличие состоит в том, что она не преобразует
символ перевода строки в пару символов - возврат каретки, перевод
строки.
<P>
Функция cprintf() возвращает число напечатанных ею символов или
отрицательную величину в случае ошибки.<BR>
</BODY>
</HTML>