Форматные преобразования fprintf.

      Комментарии к записи Форматные преобразования fprintf. отключены

На практике символьная информация почти всегда перемежается с числовыми данными, которые могут быть тем или иным способом преобразованы из машинного формата в соответствующие поля строки. Таким конвертированием данных из внутреннего представления в символьное управляют форматные указатели, задаваемые в качестве одного из параметров функции fprintf.

Форматные указатели всегда начинаются с символа %. Управляющая комбинация ‘\n’, следующая за форматным указателем – признак конца строки. Литеральные константы включаются в выводимую строку без каких-либо преобразований. К литеральным константам в последнем примере относится, в частности, признак конца строки. Количество указателей в строке форматов может не соответствовать количеству преобразуемых данных. Если длина списка формальных указателей меньше, чем количество преобразуемых данных, то список циклически повторяется. Так, например, имеем (например, в режиме командной строки):

fprintf(‘%5d’,1,2,3,4) 1 23 4

Форматный указатель ‘%5d’ в данном случае повторился четыре раза. Если количество указателей формата превышает длину выводимого списка, то лишние форматные указатели игнорируются:

fprintf(‘%d %f %e’,4,7) 4 7.000000

Данные, подлежащие преобразованию перед записью в файл, задаются третьим и последующими аргументами входными аргументами функции fprintf. Так, например, если требуется записать в очередную строку текстового файла два целых и одно вещественное значения переменных x, y и z, то это можно реализовать следующим образом:

x=123; y=2015; z=2.34567; fprintf(‘%5d %d %8.3f\n’,x,y,z); 123 2015 2.346

Значение переменной x преобразуется в формат целого числа (свидетельством этому является буква d в первом форматном указателе) и для его записи в выводной строке отводится 5 позиций. Между первым и вторым форматными указателями располагается один пробел, который считается литерной константой, разделяющей первое и второе числа. Значение переменной y преобразуется по формату %d и занимает в выводной строке 4 позиции. После второго числа вставляется еще один литеральный пробел, расположенный между вторым и третьим указателями формата. Следующие 8 позиций отведены для результата преобразования вещественного числа (свидетельством этому является буква f в третьем форматном указателе), у которого сохраняются три значащие цифры в дробной части (результат форматного преобразования при этом округляется в соответствии с общепринятыми математическими правилами).

В целом, следует отметить, что форматные указатели, используемые в функции fprintf, были привнесены в MATLAB после определенной модификации из языка программирования C++. Одной из важнейших модификаций в этом смысле является возможность использования матрицы в качестве элемента выводного списка (в этом случае список форматных указателей определяет преобразование каждого элемента очередного столбца матрицы).

В общем случае указатель формата начинается с символа ‘%’, после которого могут быть расположены три необязательные компоненты – флажки, ширина (w) и точность (.n). Указатель завершается при этом одним из символов, характеризующих тип преобразования данных, некоторые из которых представлены в таблице 1.9.2. Следует отметить, что использование целочисленных форматов (%d, %i, %u, %x, %X, %o) предполагает, что преобразуемое значение в самом деле является целым. При использовании целочисленных форматов для преобразования вещественного значения, перед выводом в файл такие величины необходимо округлить с помощью соответствующих функций (fix, round, floor или ceil).

Таблица 1.9.2. Символы, характеризующие тип преобразования данных.

Символ формата Формат результата
d Преобразованиецелочисленного значения в десятичное число со знаком
u Преобразованиецелочисленного значения в десятичное число без знака
f Преобразованиечислового значения в вещественное число с фиксированной точкой
е Преобразованиечислового значения в вещественное число с плавающей точкой (признак порядка –буква е)
E Преобразованиечислового значения в вещественное число с плавающей точкой (признак порядка –буква E)
g Преобразованиечислового значения в вещественное число с фиксированной или плавающей точкой в зависимостиот того, какой формат числа занимает меньше места (незначащие нули в дробнойчасти не выводятся)
G Преобразованиечислового значения в вещественное число с фиксированной или плавающей точкой в зависимостиот того, какой формат числа занимает меньше места (незначащие нули в дробнойчасти не выводятся)
s Преобразованиетекстового значения в строку символов.
c Преобразованиеединственного символа

Среди литеральных констант в командной строке кроме уже упомянутого ранее признака конца строки (‘\n’) могут использоваться и другие управляющие символы – Esc-последовательности (см. таблицу 1.9.3).

Таблица 1.9.3. Esc-последовательности.

Символ Описание
\b Удалениепредшествующего символа (Backspace)
\f Переводстраницы (Form feed)
\n Переводстроки (New line)
\r Возвраткаретки (Carriage return)
\t Горизонтальнаятабуляция (Horizontal tab)

Некоторые символы командной строки задействованы как управляющие:

– с символа % начинается форматный указатель;

– одиночная кавычка ‘ открывает и закрывает строку форматов;

– обратная косая черта \ использована в Esc-последовательностях.

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

– %% – воспринимается как символ процента;

– \\ – воспринимается как обратная косая черта;

– » – воспринимается как одиночная кавычка;

– \” – воспринимается как двойная кавычка.

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

Статьи к прочтению:

Программирование на Си. #11. Тип данных Short и маркеры в printf.


Похожие статьи:

  • Форматные преобразования sprintf, sscanf.

    ЛЕКЦИЯ 3 Элементы программирования в среде MATLAB Операторы цикла. Цикл – процесс повторного выполнения группы инструкций, составляющих тело цикла….

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

    2.32.1. Форматные преобразования (sprintf, sscanf). Идеологию форматного ввода-вывода данных MATLAB заимствовал у языка программирования C, практически…