ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Директивы препроцессора. Почти все программы на языке С используют специальные команды для компилятора, которые называются директивами
Почти все программы на языке С используют специальные команды для компилятора, которые называются директивами. В общем случае директива – это указание компилятору языка С выполнить то или иное действие в момент компиляции программы. Существует строго определенный набор возможных директив, который включает в себя следующие определения: #define, #elif, #else, #endif, #if, #ifdef, #ifndef, #include, #undef. Директива #define используется для задания констант, ключевых слов, операторов и выражений, используемых в программе. Общий синтаксис данной директивы имеет следующий вид: #define <идентификатор> <текст> или #define <идентификатор> (<список параметров>) <текст> Следует заметить, что символ ‘;’ после директив не ставится. Приведем примеры вариантов использования директивы #define. Листинг 1. Примеры использования директивы #define.
#include <stdio.h> #define TWO 2 #define FOUR TWO*TWO #define PX printf(“X равно %d.\n”, x) #define FMT «X равно %d.\n» #define SQUARE(X) X*X int main() { int x =TWO; PX; x = FOUR; printf(FMT, x); x = SQUARE(3); PX; return 0; } После выполнения этой программы на экране монитора появится три строки:
Директива #undef отменяет определение, введенное ранее директивой #define. Предположим, что на каком-либо участке программы нужно отменить определение константы FOUR. Это достигается следующей командой: #undef FOUR Интересной особенностью данной директивы является возможность переопределения значения ранее введенной константы. Действительно, повторное использование директивы #define для ранее введенной константы FOUR невозможно, т.к. это приведет к сообщению об ошибке в момент компиляции программы. Но если отменить определение константы FOUR с помощью директивы #undef, то появляется возможность повторного использования директивы #define для константы FOUR. Для того чтобы иметь возможность выполнять условную компиляцию, используется группа директив #if, #ifdef, #ifndef, #elif, #else и #endif. Приведенная ниже программа выполняет подключение библиотек в зависимости от установленных констант. #if defined(GRAPH) #include <graphics.h> //подключение графической библиотеки #elif defined(TEXT) #include <conio.h> //подключение текстовой библиотеки #else #include <io.h>//подключение библиотеки ввода-вывода #endif Данная программа работает следующим образом. Если ранее была задана константа с именем GRAPH через директиву #define, то будет подключена графическая библиотека с помощью директивы #include. Если идентификатор GRAPH не определен, но имеется определение TEXT, то будет использоваться библиотека текстового ввода/вывода. Иначе, при отсутствии каких-либо определений, подключается библиотека ввода/вывода. Вместо словосочетания #if defined часто используют сокращенные обозначения #ifdef и #ifndef и выше приведенную программу можно переписать в виде: #ifdef GRAPH #include <graphics.h>//подключение графической библиотеки #ifdef TEXT #include <conio.h> //подключение текстовой библиотеки #else #include <io.h> //подключение библиотеки ввода-вывода #endif Отличие директивы #if от директив #ifdef и #ifndef заключается в возможности проверки более разнообразных условий, а не только существует или нет какие-либо константы. Например, с помощью директивы #if можно проводить такую проверку: #if SIZE == 1 #include <math.h> // подключение математической библиотеки #elif SIZE > 1 #include <array.h>//подключение библиотеки обработки массивов #endif
В приведенном примере подключается либо математическая библиотека, либо библиотека обработки массивов, в зависимости от значения константы SIZE. Используемая в приведенных примерах директива #include позволяет добавлять в программу ранее написанные программы и сохраненные в виде файлов. Например, строка #include <stdio.h> указывает препроцессору добавить содержимое файла stdio.h вместо приведенной строки. Это дает большую гибкость, легкость программирования и наглядность создаваемого текста программы.
Функции ввода/вывода printf() и scanf()
Функция printf() позволяет выводить информацию на экран при программировании в консольном режиме. Данная функция определена в библиотеке stdio.h и имеет следующий синтаксис: int printf(const char * format [, argument ] ...); Здесь первый аргумент *format определяет строку, которая выводится на экран и может содержать специальные управляющие символы для вывода переменных. Затем, следует список необязательных аргументов, которые поясняются ниже. Функция возвращает либо число отображенных символов, либо отрицательное число в случае своей некорректной работы. В самой простой реализации функция printf() просто выводит заданную строку на экран монитора: printf(“Привет мир.”); Однако с ее помощью можно выводить переменные разного типа: начиная с числовых и заканчивая строковыми. Для выполнения этой операции используются специальные управляющие символы, которые называются спецификаторами и которые начинаются с символа %. Следующий пример демонстрирует вывод целочисленной переменной num на экран монитора с помощью функции printf(): int num; num = 5; printf(“%d”, num); В первых двух строках данной программы задается переменная с именем num типа int. В третьей строке выполняется вывод переменной на экран. Работа функции printf() выглядит следующим образом. Сначала функция анализирует строку, которую необходимо вывести на экран. В данном случае это «%d». Если в этой строке встречается спецификатор, то на его место записывается значение переменной, которая является вторым аргументом функции printf(). В результате, вместо исходной строки «%d» на экране появится строка «5», т.е. будет выведено число 5. Следует отметить, что спецификатор «%d» выводит только целочисленные типы переменных, например int. Для вывода других типов следует использовать другие спецификаторы. Ниже перечислены основные виды спецификаторов: %с – одиночный символ %d – десятичное целое число со знаком %f – число с плавающей точкой (десятичное представление) %s – строка символов (для строковых переменных) %u – десятичное целое без знака %% - печать знака процента С помощью функции printf() можно выводить сразу несколько переменных. Для этого используется следующая конструкция: int num_i; float num_f; num_i = 5; num_f = 10.5; printf(“numi = %d, num _ f = %f”, num _ i, num _ f); Результат выполнения программы будет выглядеть так: num_i = 5, num_f = 10.5 Кроме спецификаторов в функции printf() используются управляющие символы, такие как перевод строки \n, табуляции \t и др. Например, если в ранее рассмотренном примере необходимо вывести значения переменных не в строчку, а в столбик, то необходимо переписать функцию printf() следующим образом: printf(“num_i = %d,\n num_f = %f”, num_i, num_f); Аналогично используется и символ табуляции. Для ввода информации с клавиатуры удобно использовать функцию scanf() библиотеки stdio.h, которая имеет следующий синтаксис: int scanf(const char *format [,argument]...); Здесь, как и для функции printf(), переменная *format определяет форматную строку для определения типа вводимых данных и может содержать те же спецификаторы что и функция printf(). Затем, следует список необязательных аргументов. Работа функции scanf() демонстрируется на листинге 2. Листинг 2. Пример использования функции scanf(). #include <stdio.h> int main() { int age; float weight; printf(“Введите информацию о Вашем возрасте: ”); scanf(“%d”, &age); printf(“Введите информацию о Вашем весе:”); scanf(“%f”, &weigth); printf(“Ваш возраст = %d, Ваш вес = %f”, age, weigth); return 0; } Основным отличием применения функции scanf() от функции printf() является знак & перед именем переменной, в которую записываются результаты ввода. Функция scanf() может работать сразу с несколькими переменными. Предположим, что необходимо ввести два целых числа с клавиатуры. Формально для этого можно дважды вызвать функцию scanf(), однако лучше воспользоваться такой конструкцией: scanf(“ %d, %d ”, &n, &m); Функция scanf() интерпретирует это так, как будто ожидает, что пользователь введет число, затем – запятую, а затем – второе число. Функция scanf() возвращает число успешно считанных элементов. Если операции считывания не происходило, что бывает в том случае, когда вместо ожидаемого цифрового значения вводится какая-либо буква, то возвращаемое значение равно 0. Не нашли, что искали? Воспользуйтесь поиском:
|