Читаем Программирование. Принципы и практика использования C++ Исправленное издание полностью

Это не очень интересно. Намного интереснее то, что функция printf() может получать любое количество аргументов и начальную управляющую строку, которая определяет, как вывести дополнительные аргументы. Объявление функции printf() в языке C выглядит следующим образом:

int printf(const char* format, ...);

Многоточие (...) означает “и, возможно, остальные аргументы”. Мы можем вызвать функцию printf() так:

void f1(double d, char* s, int i, char ch)

{

  printf("double %g string %s int %d char %c\n", d, s, i, ch);

}

где символы %g означают: “Напечатать число с плавающей точкой, используя универсальный формат”, символы %s означают: “Напечатать С-строку”, символы %d означают: “Напечатать целое число, используя десятичные цифры,” а символы %c означают: “Напечатать символ”. Каждый такой спецификатор формата связан со следующим, до поры до времени не используемым аргументом, так что спецификатор %g выводит на экран значение переменной d; %s — значение переменной s, %d — значение переменной i, а %c — значение переменной ch. Полный список форматов функции printf() приведен в разделе Б.10.2.

  К сожалению, функция printf() не является безопасной с точки зрения типов. Рассмотрим пример.

char a[] = { 'a', 'b' };      /* нет завершающего нуля */

void f2(char* s, int i)

{

  printf("goof %s\n", i);     /* неперехваченная ошибка */

  printf("goof %d: %s\n", i); /* неперехваченная ошибка */

  printf("goof %s\n", a);     /* неперехваченная ошибка */}

Интересен эффект последнего вызова функции printf(): она выводит на экран каждый байт участка памяти, следующего за элементом a[1], пока не встретится нуль. Такой вывод может состоять из довольно большого количества символов.

Недостаток проверки типов является одной из причин, по которым мы предпочитаем потоки iostream, несмотря на то, что стандартный механизм ввода-вывода, описанный в библиотеке stdio языков C и C++, работает одинаково. Другой причиной является то, что функции из библиотеки stdio не допускают расширения: мы не можем расширить функцию printf() так, чтобы она выводила на экран значения переменных вашего собственного типа. Для этого можно использовать потоки iostream. Например, нет никакого способа, который позволил бы вам определить свой собственный спецификатор формата %Y для вывода структуры struct Y.

Существует полезная версия функции printf(), принимающая в качестве первого аргумента дескриптор файла.

int fprintf(FILE* stream, const char* format, ...);

Рассмотрим пример.

fprintf(stdout,"Hello, World!\n"); // идентично

                                   // printf("Hello,World!\n");

FILE* ff = fopen("My_file","w");   // открывает файл My_file

                                   // для записи

fprintf(ff,"Hello, World!\n");     // запись "Hello,World!\n"

                                   // в файл My_file

Дескрипторы файлов описаны в разделе 27.6.3.

<p id="AutBody_Root558"><strong>27.6.2. Ввод</strong></p>

Ниже перечислены наиболее популярные функции из библиотеки stdio.

int scanf(const char* format, ...); /* форматный ввод из потока stdin */

int getchar(void);      /* ввод символа из потока stdin */

int getc(FILE* stream); /* ввод символа из потока stream*/

char* gets(char* s);    /* ввод символов из потока stdin */

Простейший способ считывания строки символов — использовать функцию gets(). Рассмотрим пример.

char a[12];

gets(a); /* ввод данных в массив символов a вплоть до символа '\n' */

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных