Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Техн.прогр.в.2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
962.56 Кб
Скачать

Форматированный ввод-вывод

Для форматированного вывода в поток предназначена функция

fprintf(FILE* stream, const char* formatted_string, arguments, …)

Для подстановки значений переменных в строку вывода используют символы подстановки (спецификаторы формата), начинающиеся с символа «%»:

%[флаги][размер][.точность][модификатор_длины]тип_данного1

Флаги:

«-» – выравнивание результата по левому краю (по умолчанию – по правому относительно заданного количества выводимых символов);

«+» – результат всегда начинается со знака (+/-);

«#» – особая форма отображения результата.

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

n – минимум n символов отводится для записи числа, недостающие символы заменяются пробелами;

0n – то же, но недостающие символы заменяются нулями;

* – список аргументов содержит размеры данных.

Точность показывает для вещественных чисел количество знаков после десятичной точки.

Модификатор длины может принимать одно из значений:

F – «длинный» указатель;

N – «короткий» указатель;

h – short int;

l – long int, double;

L – long double.

Тип данного может принимать одно из значений:

%d, %i – знаковое десятичное целое;

%u – беззнаковое десятичное целое;

%o – беззнаковое восьмеричное целое;

%x, %X – беззнаковое шестнадцатеричное целое;

%f – знаковое вещественное;

%e, %E – знаковое вещественное в экспоненциальной форме;

%g, %G – знаковое вещественное, форма зависит от числа, размера и точности;

%c – символ;

%s – строка;

%% – символ «%»;

%n, %p – указатель.

Аргументы, передаваемые в функцию, должны соответствовать количеству и типу спецификаторам формата.

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

fscanf(FILE* stream, const char* formatted_string, arguments, …)

Строка также может содержать спецификаторы формата, при этом:

– при невозможности предобразования строки в число, число принимает значение ноль;

– строкой считается слово до разделителя (пробел, табуляция, перевод строки).

Для стандартных потоков определены аналогичные функции:

printf(const char* formatted_string, arguments, …)

scanf(const char* formatted_string, arguments, …)

являющиеся аналогами описанных ранее функций, разница заключается в том, что используются стандартные потоки ввода и вывода (stdin, stdout) которые в качестве аргументов не указываются.

Определены функции, использующие вместо потока строку:

sprintf(char *dest, const char* formatted_string, arguments, …)

sscanf(char *src, const char* formatted_string, arguments, …)

1.9. Директивы препроцессора

Есть специальные команды, которые не компилируются, а лишь указывают препроцессору на необходимость выполнения некоторых действий. Директивы начинаются с символа #.

#include <имя_файла> - добавить в данное место содержимое файла, файл содержится в специальном каталоге подключаемых файлов;

#include "имя_файла" - тоже, но для файла из текущего каталога.

Примеры стандартных заголовочных файлов (аналоги библиотек в других ЯВУ):

stdio.h – стандартный ввод-вывод;

string.h – работа со строками;

math.h – математические операции;

limits.h – константы предельных значений;

Следующие заголовочные файлы определены только для ОС Ms Dos и консольных приложений Ms Windows

conio.h – консольный ввод-вывод;

mem.h – функции работы с памятью;

dos.h – команды ОС Ms Dos.

#define идентификатор строка_замещения - заменяет все идентификаторы от директивы до конца файла на строку замещения.

#define WIDTH 80

#define LENGTH ( WIDTH + 10 )

#define test( f1, f2 ) ( f1 * f2 )

#undef идентификатор - отменяет директиву define, после данной директивы замен не производится.

#if, #elif, #else, #endif – организуют ветвление.

#ifdef, #ifndef – далее следующий код будет откомпилирован только если определена / неопределенна макроподстановка.