Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
10.04 Кб
Скачать
<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            символ кавычки

\&quot;      22h            двойная кавычка

\\      5Ch            обратный слеш

\%      25h            знак процента</FONT>
</PRE>
<HR>
<P>
Таблица 13.1 Управляющие символы.
<P>
Функции возвращают ASCII-код выведенного символа, а в случае ошибки
возвращают константу EOF. Чтобы конкретизировать ошибку можно
воспользоваться функцией ferror().
<PRE>
<FONT COLOR=#000080>// использование функци putchar()

#include &lt;stdio.h&gt;

void main(void) {

   char *ptr,
      out_str[] = &quot;\aputchar\nputc\a&quot;;

   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 &lt;stdio.h&gt;

void main(void) {
   puts(&quot;Работает функция puts!&quot;);
}</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 &lt;stdio.h&gt; 

void main(void) {

   int  char_count;
   char ptr[] = &quot;строка&quot;;

   printf(&quot;\n%23d  \n%e  \n%.3E  \n%f  \n%+g  \n%-23G \n\n&quot;,
         1111,   0.01, 0.01,   0.01, 0.01,  0.0000001);

   printf(&quot;%s%n&quot;, ptr,  &amp;char_count);

   printf(&quot;\n\nПредыдущая функция вывела %d символов.\n\n&quot;, 
          char_count);

   printf(&quot;Это %s, расположенная по адресу %Lp.\n\a&quot;, 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>
Соседние файлы в папке Видеоадаптеры