#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 ( argumen t) ... ) ;
Здесь первый аргумент *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("num_i = %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() :
#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.