Язык Си - руководство для начинающих
Шрифт:
#define takein scanf
#define spilout printf
#define TWO 2
#define times *
#define whole int
Этот пример иллюстрирует, как работает препроцессор. Он просматривает вашу программу и проводит поиск элементов, определяемых директивами #define. Обнаружив такие элементы, он полностью заменяет их. В нашем примере во время компиляции все слова then заменяются символами "точка с запятой", end– } и т.д.
Эту мощную возможность языка можно использовать для задания макрокоманд, являющихся одним из вспомогательных средств программирования. Мы вернемся к обсуждению этой темы в гл. 11.
Теперь необходимо упомянуть о некоторых ограничениях. Например, части программы, заключенные в кавычки, закрыты для подстановок. Операторы, приводимые ниже, служат иллюстрацией такого положения:
#define MN "минимифидианизм"
printf(" Oн глубоко верил в MN.\n");
Распечатка будет выглядеть так:
Oн глубоко верил в MN.
Однако после выполнения оператора
printf(" Он глубоко верил в %s.\n" , MN);
мы получим следующий результат:
Он глубоко верил в минимифидианизм.
В последнем случае константа с именем MN находилась вне кавычек и поэтому была заменена соответствующим значением.
ИЗУЧЕНИЕ И ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ printf И scanf
Функции printf и scanf дают нам возможность взаимодействовать с программой. Мы называем их функциями ввода-вывода. Это не единственные функции, которыми мы можем воспользоваться для ввода и вывода данных с помощью программ на языке Си, но они наиболее универсальны. Указанные функции не входят в описание языка Си. И действительно, при работе с язы ком Си реализация функций ввода-вывода возлагается на создателей компилятора; это дает возможность более эффективно организовать ввод вывод на конкретных машинах. Однако в интересах обеспечения совместимости различные системы имеют дело с некоторыми вариантами функций scanf и printf. Все, о чем мы здесь говорим, должно быть в основном справедливо для большинства систем, но не удивляйтесь, если обнаружите некоторые отличия в имеющейся у вас версии.
Обычно функции printf и scanf "работают" во многом одинаково - каждая использует "управляющую строку" и список "аргументов". Сначала мы рассмотрим работу функции printf, затем scanf.
Инструкции, передаваемые функции printf, когда мы "просим" ее напечатать некоторую переменную, зависят от того, какого типа эта переменная. Например, при выводе на печать целого числа применяется формат %d, а при выводе символа - %с. Ниже перечислены все форматы, указываемые при обращениях к функции printf, а затем показано, как они используются. Каждому форма ту соответствует тип выводимой (с их помощью) информации, причем первые пять покрывают большинство возникающих потребностей, а остальные четыре применяются достаточно редко.
Формат | Тип выводимой информации |
---|---|
%d | Десятичное
|
%с | Один символ |
%s | Строка символов |
%е | Число с плавающей точкой, экспоненциальная запись |
%f | Число с плавающей точкой, десятичная запись |
%g | Используется вместо записей |
%f | или %е, если он короче |
%u | Десятичное целое число без знака |
%о | Восьмеричное целое число без знака |
%x | Шестнадцатеричное целое число без знака |
Посмотрим теперь, как эти форматы применяются.
Использование функции printf
Приведем программу, иллюстрирующую обсуждаемые вопросы:
/* печать чепухи*/
#define PI 3.14159
main
{
number = 5;
float ouzo =13,5;
int cost = 31000;
printf("%d женщин выпили %f стаканов ликера. \n",
number, ouzo);
printf(" Значение числа pi равно %f \n", PI);
printf(" Прощай! Твое искусство слишком дорого для меня \n");
printf(" %c%d\n", '$', cost);
}
Результат выглядит так:
5 женщин выпили 13,50000 стаканов ликера.
Значение числа pi равно 3,14159.
Прощай! Твое искусство слишком дорого для меня.
$31000
Формат, указываемый при обращении к функции printf, выглядит следующим образом:
рrintf(Управляющая строка, аргумент1, аргумент2, ...,);
Аргумент1, Аргумент2 и т. д.
– это печатаемые параметры которые могут быть переменными, константами или даже выражениями, вычисляемыми вначале, перед выводом на печать.
Управляющая строка– строка символов, показывающая, как должны быть напечатаны параметры. Например, в операторе:
printf(" %d женщин выпили %f стаканов ликера. \n" , number, ouzo);
управляющей строкой служит фраза в кавычках (учитывая предыдущие замечания, это - строка символов), a number и ouzo– аргументы или в данном случае значения двух переменных.