Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР5-С++-22 марта-2012.doc
Скачиваний:
12
Добавлен:
15.09.2019
Размер:
1.48 Mб
Скачать

1.11.8. Директива #define

Директива #defme имеет несколько модификаций. Они предусматривают определение макросов или препроцессорных идентификаторов, каждому из которых ставится в соответствие некоторая символьная последовательность. В последующем тексте программы препроцессорные идентификаторы заменяются на заранее запланированные последовательности символов. Рассмотрим два случая использования директивы #defme.

1. Для замены идентификатора заранее подготовленной последова­тельностью символов используется директива (обратите внимание на пробелы):

#define идентификатор строка_замещения

Директива может размещаться в любом месте обрабатываемого текста, а ее действие в обычном случае распространяется от точки размещения до конца текста. Директива, во-первых, определяет иден­тификатор как процессорный. В результате обработки все вхождения определенного командой #define идентификатора в текст программы заменяются строкой замещения, окончанием которой обычно служит признак конца той строки, где размещена команда #define. Символы пробелов, помещенные в начале и в конце строки замещения, в под­становке не используются. Например:

Исходный текст Результат препроцессорной обработки

#define begin {

define end }

int main() int main()

begin {

операторы; операторы;

end }

В данном случае программист решил использовать в качестве операторных скобок идентификаторы begin, end. Компилятор языка С++ не может обрабатывать таких скобок, и поэтому до компиля­ции препроцессор заменяет все вхождения этих идентификаторов стандартными фигурными скобками { и }. Соответствующие указания програм­мист дал препроцессору с помощью директив #define.

2. Если в программе нужно часто печатать или выводить на экран дисплея значение какой-либо переменной и, кроме того, снабжать эту печать одним и тем же пояснительным текстом, то удобно ввести со­кращенное обозначение оператора печати. Например, так:

#define РК cout << "\n Номер элемента N = " << N << ' . '

После этой директивы использование в программе оператора РК; будет эквивалентно (по результату) оператору из строки замещения. Например, последовательность операторов

int N >> 4; РК;

приведет к выводу такого текста:

Номер элемента N = 4.

Если в программе возникает необходимость часто печатать или выводить на экран дисплея значение какой-либо переменной (или выполнять другие действия), то целесообразно ввести сокращенное обозначение с использование директивы #define, например

#define V printf("Выполните ввод\n");

#define Pi 3.14

После этих директив в программе можно использовать операторы V и Pi.

1.11.9. Оператор потокового вывода cin

Ранее ваши программы использовали выходной поток cout для отображения вывода на экран. Настало время узнать как язык C++ обеспечивает входной поток с именем cin, из которого программы могут читать информацию, введенную пользователем с клавиатуры. При использовании cin для чтения ввода с клавиатуры вы указываете одну или несколько переменных, которым cin будет присваивать входные значения.

Для консольного ввода данных используют формат записи:

cin >> переменная;

Следующая программа LR5-25.cpp в примере 5.25 использует cin для чтения числа, введенного с клавиатуры. При этом переменная Age служит приемником вводимого значе­ния. Программа присваивает введенное число переменной с именем Age, а затем выводит значение переменной, используя выходной поток cout.

Пример 5.25.

/*Программа LR5-Primer25*/

#include <iostream.h>

#include<conio.h>

int main()

{

int Age; // Число, читаемое с клавиатуры

cout << " Введите Ваш возраст: ";

cin >> Age;

cout << "Ваш возраст: " << Age << endl;

getch();

return 0;

}

Таким образом, переменная Age принимает введенное с кон­соли целое значение. Ответственность за проверку соответствия типов вводимого и ожидаемого значений лежит на программисте.

Оператор потокового вывода cin часто называют оператором извлечения, потому что он извлекает (удаляет) данные из входного потока, присваивая значение указанной переменной.