Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры теория 113019.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
379.66 Кб
Скачать

40. Управляющая строка функций ввода/вывода

Функция ввода scanf (управляющая строка , список адресов объектов ввода);

в управляющей строке указываются только модификаторы форматов, количество и порядок следования которых должны совпадать с количеством и порядком следования вводимых объектов, а тип данных будет преобразовываться в соответствии с модификаторами.

Функция вывода printf( управляющая строка , список объектов вывода);

В управляющей строке, заключенной в кавычки, записывают: поясняющий текст, который выводится на экран без изменения (комментарии), список модификаторов форматов, указывающих компилятору способ вывода объектов (признак модификатора формата – символ %) и специальные символы, управляющие выводом (признак – символ \).

41. Ввод-вывод потоками.

В С++ ввод и вывод осуществляется через потоки – объекты классов ввода-вывода, которые передают и принимают данные и связываются с физическими устройствами. Следующие потоки определены и автоматически открываются  при запуске приложения:

extern istream cin;  // cтандартный поток ввода с клавиатуры

extern ostream cout; // cтандартный поток вывода на экран

extern ostream cerr; /* cтандартный поток вывода сообщений об ошибках */

extern ostream clog;/*буферизованный поток вывода сообщений об ошибках */

Поскольку текст программ на С и на С++ часто путают, то путают иногда и потоковый ввод-вывод С++ и функции ввода-вывода семейства  printf для языка С. Далее, т.к. С-функции можно вызывать из программы на С++, то многие предпочитают использовать более знакомые функции ввода-вывода С. По этой причине здесь будет дана основа функций ввода-вывода С.

Обычно операции ввода-вывода на С и на С++ могут идти по очереди на уровне строк. Перемешивание их на уровне посимвольного ввода-вывода возможно для некоторых реализаций, но такая программа может быть непереносимой. Некоторые реализации потоковой библиотеки С++ при допущении ввода-вывода на С требуют вызова статической функции-члена ios::sync_with_stdio().

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

42. Препроцессор. Директивы #include, #define, #if.

Препроцессор, это программа предварительной обра­­ботки исходного текста программы перед этапом компиляции. Чаще всего препроцессор автоматически вызывается на этапе компи­ля­ции, если в исходном тексте обнаружена хотя бы одна его директива.Признаком директивы препроцессора является символ #. При необходимости продолжения директивы в следующей строке текущую строку должен завершать символ '\'.Возможности препроцессора языка Cи:– лексемное замещение идентификаторов;– макрозамещение;– включение файлов исходного текста;– условная компиляция;– изменение нумерации строк и текущего имени файла. Директива определения значения идентификатора (ID):#define ID строка В результате каждое вхождение в исходный текст элемента ID заменяется на значение элемента строка: #define L_bufs 2048 #define binary int #define WAIT fflush(stdin); getch() #define BEEP sound(800);\ delay(100);\ nosound() Лексемное замещение весьма удобно для сокращения записи повторяю­щихся фрагментов теста и определения символических констант: #define YES 1 #define NO 2 #define ESC 27 #define Enter 30 которые могут быть в дальнейшем использованы: if (x==ESC) break; BEEP; return(YES); Директива отмены #undef ID Далее по исходному тексту можно назначить новое значение такого идентификатора. Макрозамещение – обобщение лексемного замещения посредством параметризации строки директивы define в виде. Макроопределение отменяется директивой undef. Идентификаторы макроопределений обычно составляют из прописных букв латинского алфавита. Это позволяет отличать макрокоманды от вызова функций. Подключение файлов исходного текста Напомним, что имеются два варианта запроса включения в текущий файл содержимого другого файла. Директива #include < ID_файла>вводит содержимое файла из стандартного каталога (обычно – include), а директива#include " ID_файла"организует последовательный поиск в текущем, системном и стандартном каталогах. Рекомендуется описания системных объектов включать из стандартных каталогов и размещать их в начале файла исходного текста программы. Системные объекты в результате получают атрибут области действия «глобальный», что устраняет неоднозначность их описания. Директивы условной компиляции и реализуемые правила включения исходного текста: а) условное включение (аналог работы оператора if): #if<предикат_условия> ТЕКСТ_1#endif б) альтернативное включение (аналог if-else): #if<предикат_условия> ТЕКСТ_1 #else ТЕКСТ_2 #endif Виды предикатов условий:константное_выражение  истина, если его значение 0;def ID  истина, если ID был опреде­лен ранее оператором #define;ndef ID  истина, если ID не был опре­де­лен оператором #define.Константное_выражение отделяется от ключевого слова if разделителем, а def и ndef – нет.Элементы исходного текста «ТЕКСТ_1» или «ТЕКСТ_2» могут содержать любые директивы препроцессора.