Лабораторная работа 4. Форматное преобразование данных

Цель работы

Исследование библиотечных функций для форматного преобразования данных.

Задание

1.1. Преобразование целых чисел

Преобразовать целые числа типов char, short, long со знаком и без в символьный формат, используя функцию sprintf и форматы ”%d”, ”%u”, ”%x”. Научиться форматировать числа с заполнением слева пробелами и без подавления ведущих нулей. Описание форматов можно получить в документации на Borland C++ Builder или в приложении к заданию.

Пример .

 

int a;

scanf("%d", &a);

 

char fmt[16];

scanf("%s", &fmt);

 

printf(fmt, a);

 

Преобразовать целые числа типов short и long со знаком и без из символьного формата в числовой, используя функцию sscanf и форматы ”%d”, ”%u”, а также модификаторы ”h” и”l”.

Пример .

 

char buf[32];

char fmt[16];

scanf("%s", &buf);

scanf("%s", &fmt);

short a;

sscanf(buf, fmt, &a);

printf("%d", a);

 

1.2. Преобразование чисел с плавающей точкой

Преобразовать числа типов float и double из символьного формата в числовой и наоборот, используя функции sscanf и sprintf соответственно. Научиться работать с форматами ”%f”, ”%e”, ”%g”, задавать требуемое число разрядов числа и число разрядов после децимальной точки, заполнять буфер форматирования пробелами слева и ведущими нулями.

 

1.3. Преобразование символов и строк

Преобразовать символы и строки используя форматы ”%c” и ”%s”. Научиться выравнивать текст при выводе влево или вправо, усекать текст до нужного размера поля, дополнять пробелами.

 

1.4. Форматирование строки данных

Реализовать в программе форматирование строки данных разных типов. Попробовать различные варианты форматирования.

Пример .

 

typedef struct

{

short a;

float b;

char c[16];

} A;

 

A data[] =

{

{ 200, 25.178, "C++"},

{ -34, 1234.520, "FORTRAN"},

{ 0, 0.000, "Pascal"}

};

 

int main(int argc, char* argv[])

{

char buf[256];

 

for(int i = 0; i < sizeof(data)/sizeof(A); i++)

{

printf("[%5d] : %8.1f (Язык: %16s)",

data[i].a, data[i].b, data[i].c);

}

}

1.5. Числовые константы

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

Пример .

 

int a = 0x123;

printf(”%d”, a);

 

Задать, преобразовать в символьный вид и вывести в поле вещественные константы в обычном (с точкой) и экспоненциальном форматах.

Пример .

 

double x = .32;

printf("%g", x);

 

Результаты наблюдений занести в отчет.

 

1.6. Приложение

Спецификаторы формата имеют следующий вид:

% [флаги] [ширина] [.точность] [F|N|h|l|L] тип

Каждый спецификатор начинается со знака процента (%). После % идут компоненты формата в следующем порядке:

Компонент Обязательный / необязательный Назначение
флаги Необязательный Выравнивание, знаки (+, -), децимальная точка, хвостовые нули, восьмеричный и шестнадцатиричный префиксы
ширина Необязательный Минимальное число символов поля, дополняемое пробелами или нулями
точность Необязательный Максимальное число символов поля, для целых – минимальное число выводимых цифр
F|N|h|l|L Необязательный Переопределяет размер по умолчанию преобразуемого аргумента
тип Обязательный Тип преобразования

Флаги имеют следующие значения:

Флаг Назначение
- Выравнивание результата по левой границе, если не задан, то результат выравнивается по правой границе поля
+ Обязательно выводятся знаки + и – для чисел

Ширина поля имеет следующий формат:

Ширина Назначение
n Печатается как минимум n знаков. Если преобразуемое число имеет меньше символов, то дополняется пробелами
0n Печатается как минимум n знаков. Если преобразуемое число имеет меньше символов, то дополняется нулями

Точность имеет следующий смысл:

Точность Назначение
нет Используется точность по умолчанию
.0 Децимальный знак не печатается
.n Печатается n децимальных знаков. Для формата s задает максимальное число символов

Модификаторы размера аргумента:

Префикс Типы Назначение
h d i o u x X short int
l d i o u x X long int
L d i o u x X __int64
l e E f g G double
L e E f g G long double

Типы преобразования:

Тип Аргумент Назначение
d целый Знаковое десятичное целое
i целый Знаковое десятичное целое
o целый Беззнаковое восьмеричное целое
u целый Беззнаковое десятичное целое
x целый Беззнаковое шестнадцатеричное целое (с abcdef)
X целый Беззнаковое шестнадцатеричное целое (с ABCDEF)
f вещественный Знаковое число в формате с плавающей точкой
e вещественный Знаковое число в экспоненциальном формате
g вещественный Знаковое число в смешанном формате
E вещественный Знаковое число в экспоненциальном формате (E)
G вещественный Знаковое число в смешанном формате (E)
c символ Один символ
s строка Печатается строка символов до нулевого
% Печатается знак %