[Назад] [Содеожание] [Дальше]

Программирование видеоадаптеров.

© Александр Фролов, Григорий Фролов
Том 21, М.: Диалог-МИФИ, 1993.

9. Стандартные функции вывода языка Си

  • Функции putchar и putc
  • Функция puts
  • Функция printf
  • Функция putch
  • Функция cputs
  • Функция cprintf
  • В главе рассмотрены основные стандартные функции вывода текстовых данных на экран (через стандартный выходной поток и через консоль). К ним относятся функции putc, putchar, putch, puts, cputs, printf и cprintf.

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

    Функции putchar и putc

    Эти функции помещают один символ в текущую позицию выходного потока. Прототипы функций представлены ниже:

    
    int putc( int ch, FILE *stream );
    
    int putchar( int ch );
    

    Функция putc отличается от putchar наличием второго аргумента, который определяет выходной поток, в который помещается символ. Она может использоваться и для записи символов в открытый файл и для записи в стандартные потоки ввода-вывода. В частности, если второй аргумент функции равен константе stdout, то она эквивалентна функции putchar и выводит символ в стандартный выходной поток. Этот поток может идти на экран монитора или в файл, если используется свойство переназначения потока. Фактически функция putchar является макроопределением:

    
    #define putchar(_c)             putc((_c),stdout)
    

    Первые параметры обеих функций совпадают по смыслу и задают ASCII-код выводимого символа (не смотря на то, что переменная ch целого типа, используется только ее младший байт). Функции обрабатывают управляющие символы. Список управляющих символов приведен в следующей таблице:

    Символ

    Код ASCII

    Значение

    \a

    07h

    Звуковой сигнал

    \b

    08h

    Перемещение назад

    \f

    0Ch

    Переход к новой странице

    \n

    0Ah

    Новая строка

    \r

    0Dh

    Возврат каретки

    \t

    09h

    Горизонтальная табуляция

    \v

    0Bh

    Вертикальная табуляция

    \'

    27h

    Символ кавычки

    \"

    22h

    Двойная кавычка

    \\

    5Ch

    Обратный слеш

    \%

    25h

    Знак процента

    Функции возвращают ASCII-код выведенного на экран символа, а в случае ошибки возвращают константу EOF. Чтобы конкретизировать ошибку можно воспользоваться функцией ferror.

    Программа PUTCHAR (листинг 9.1) демонстрирует использование функции putchar.

    Листинг 9.1. Файл PUTCHAR.C

    
    // Использование функции putchar
    #include <stdio.h>
    
    void main(void) {
    
            char *ptr,
                    out_str[] = "\aputchar\nputc\a";
    
            for(ptr = out_str; *ptr; putchar(*(ptr++)) );
    }
    

    Включаемый файл STDIO.H содержит спецификации функций putchar и putc. Следовательно, этот файл необходимо включать во все программы, использующие данные функции.

    Функция puts

    Функция puts позволяет записать строку в стандартный выходной поток stdout. Строка должна оканчиваться нулем (символ '\0'). Этот символ не помещается в выходной поток. Вместо него записывается управляющий символ '\n', который переводит курсор в начало новой строки.

    Функция имеет следующий прототип:

    
    int puts( char *string );
    

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

    При использовании функции puts необходимо включить директивой include файл STDIO.H, содержащий спецификацию этой функции.

    Программа PUTS (листинг 9.2) демонстрирует использование функции puts.

    Листинг 9.2. Файл PUTS.C

    
    #include <stdio.h>
    
    void main(void) {
            puts("Работает функция puts!");
    }
    

    Функция printf

    Наиболее универсальной стандартной функцией, обеспечивающей запись в выходной поток stdout, является функция printf. Она производит вывод на экран монитора строк, отдельных символов и чисел в различных форматах.

    Приведем прототип функции printf:

    
     int printf( char *format [,argument]... );
     

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

    .   символов непосредственно отображаемых на экране,

    .   управляющих символов,

    .   спецификаторов формата.

    Непосредственно выводимые символы и управляющие символы помещаются в выходной поток без изменения.

    Если управляющая строка содержит спецификаторы формата, то каждому спецификатору должен соответствовать один аргумент, следующий за управляющей строкой. Аргументы представляют собой переменные или константы, которые преобразуются согласно соответствующих им спецификаторов формата и затем также помещаются в выходной поток.

    Различные спецификаторы формата перечислены в следующей таблице:

    Спецификатор формата

    Тип данных

    %d, %i

    Целое десятичное число

    %s

    Текстовая строка

    %c

    Один символ

    %e, %E

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

    %f

    Число с плавающей точкой в десятичной записи

    %u

    Целое десятичное число без знака

    %o

    Целое восьмеричное число без знака

    %x, %X

    Целое шестнадцатиричное число без знака

    %g, %G

    Либо %e, либо %f в зависимости от того, в каком формате запись короче

    %p

    Значение указателя

    %n

    Количество символов

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

    
    % [флаг] [ширина] [.точность] [префикс типа] символ преобразования
    

    Флаги приведены в таблице 13.3, а префиксы типов в таблице 13.4.

    Параметр [ширина] задает минимальную ширину поля, используемую при печати строки или числа. Если это число или строка не помещаются в поле целиком, то ширина поля увеличивается.

    Параметр [.точность] определяет для чисел количество отображаемых после запятой цифр, а для строк - максимальное число символов в строке.

    Флаг

    Значение

    -

    Выравнивание по левой границе

    +

    Перед числом помещается его знак

    пробел (' ')

    Перед данными помещается пробел

    Префикс типа

    Значение

    F

    Дальний указатель

    N

    Ближний указатель

    h

    Короткое целое

    l, L

    Длинное целое

    Функция printf возвращает количество напечатанных ею символов или, в случае ошибки, отрицательную величину.

    Использование различных спецификаторов формата функции printf демонстрируется программой PRINTF (листинг 9.3).

    Листинг 9.3. Файл PRINTF.C

    
    // При использовании функции 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);
    }
    

    Функция putch

    Функция выполняет запись символа на консоль без буферизации. Прототип функции:

    
    int putch( int ch );
    

    Параметр функции ch содержит код ASCII выводимого символа. Заметим, что используется только младший байт параметра функции.

    Функция putch возвращает код ASCII записанного символа, или, в случае возникновения ошибки, константу EOF.

    При использовании функции putch необходимо включить в программу файл CONIO.H, который содержит ее спецификацию.

    Функция cputs

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

    Приведем прототип функции cputs:

    
    int cputs( char *string );
    

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

    При использовании функции cputs необходимо включить директивой include файл CONIO.H, содержащий спецификацию этой функции.

    Функция cprintf

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

    Приведем прототип функции cprintf:

    
    int cprintf( char *format [,argument]... );
    

    Ее параметры соответствуют параметрам функции printf, описанной выше. Единственное отличие состоит в том, что она не преобразует символ перевода строки в пару символов - возврат каретки, перевод строки.

    Функция cprintf возвращает количество напечатанных символов или отрицательную величину в случае ошибки.

    [Назад] [Содеожание] [Дальше]


    Hosted by uCoz