Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Модификаторы минимальной ширины поля




Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то чтобы ширина поля вывода была не меньше указанной минимальной длины, при необходимости вывод будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05d означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы число состояло из пяти цифр. В следующей программе показано, как применяется модификатор минимальной ширины поля:

#include <stdio.h>

void main()

{

int a=120;

double item=10.12304;

printf("%2i\n", a);

printf("%5i\n", a);

printf("%05i\n", a);

printf("%f\n", item);

printf("%5f\n", item);

printf("%10f\n", item);

printf("%012f\n", item);

}

Вот что выводится при выполнении этой программы:

10.123040

10.123040

10.123040

00010.123040

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

#include <stdio.h>

void main()

{

for(int i=1; i<=10; i++)

printf("%5d %5d %5d\n", i, i*i, i*i*i);

}

В результате выполнения получится следующее:

1 1 1

2 4 8

3 9 27

4 16 64

5 25 125

6 36 216

7 49 343

8 64 512

9 81 729

10 100 1000

Модификаторы точности

Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.

Когда модификатор точности применяется к данным с плавающей точкой, для преобразования которых используются спецификаторы преобразования %f, %e или %E, то он определяет количество выводимых десятичных разрядов. Например, %10.4f означает, что ширина поля вывода будет не менее 10 символов, причем для десятичных разрядов будет отведено четыре позиции.

Если модификатор точности применяется к %g или %G, то он определяет количество значащих цифр.

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

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

В следующей программе показано, как можно использовать модификатор точности:

#include <stdio.h>

void main()

{

printf("%8.2f\n", 123.1234567);

printf("%.4f\n", 123.1234567);

printf("%3.8d\n", 1000);

printf("%10.15s\n", "Это простая проверка.");

}

Вот что выводится при выполнении этой программы:

123.12

123.1235

Это простая про

Выравнивание вывода

По умолчанию весь вывод выравнивается по правому краю. То есть если ширина поля больше ширины выводимых данных, то эти данные располагаются по правому краю поля. Вывод по левому краю можно назначить принудительно, поместив знак минус прямо за %. Например, %-10.2f означает, что число с плавающей точкой и с двумя десятичными разрядами будет выровнено по левому краю 10-символьного поля.

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

#include <stdio.h>

void main()

{

printf("по правому краю: %8d\n", 100);

printf(" по левому краю: %-8d\n", 100);

}

Результат работы программы:

по правому краю: 100

по левому краю: 100

Форматный ввод: функция scanf()

Функция scanf()- функция форматированного ввода. Она может читать данные всех встроенных типов и автоматически преобразовывать числа в соответствующий внутренний формат.

Обращение к этой функции имеет вид:

scanf (Управляющая_строка, &Имя1, &Имя2,..., &ИмяN);

где:

· Имя1, Имя2,..., ИмяN – это имена переменных, значения которых надо ввести.

· Управляющая_строка – это строка символов, которая задает количество и типы вводимых переменных.

Управляющая строка состоит из символов трех видов:

· спецификаторов преобразования,

· разделителей,

· символов, не являющихся разделителями.

Спецификаторы преобразования

Каждый спецификатор формата ввода начинается со знака %, причем спецификаторы формата ввода сообщают функции scanf() тип считываемых данных. Перечень спецификаторов приведен в таблице 6. Спецификаторам преобразования в порядке слева направо ставятся в соответствие элементы списка аргументов.

Таблица 6. Спецификаторы преобразования для функции scanf()

Спецификатор преобразования Описание
%c Читает одиночный символ
%s Читает строку
%d Читает десятичное целое число
%i Читает целое число как в десятичном, так и восьмеричном или шестнадцатеричном формате
%e Читает число с плавающей точкой
%f Читает число с плавающей точкой
%g Читает число с плавающей точкой
%u Читает десятичное целое число без знака
%o Читает восьмеричное число
%x Читает шестнадцатеричное число
%p Читает указатель
%n Принимает целое значение, равное количеству уже считанных символов
%[] Читает набор сканируемых символов
%% Читает знак процента

Если нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед именем переменной требуется писать символ &.

Если требуется ввести значение строковой переменной, то использовать символ & не нужно.

При обращении к функции scanf() выполнение программы приостанавливается, и нужно ввести значения для указанных переменных, после чего работа программы продолжается.

Пример. Программа читает пять десятичных чисел.

#include <stdio.h>

void main()

{

int a,b,c,d,e;

scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);

printf(" %d %d %d %d %d\n ",a,b,c,d,e);

}

Пример. Программа читает восьмеричное и шестнадцатеричное число.

#include <stdio.h>

void main()

{

int i, j;

scanf("%o%x", &i, &j);

printf("%o %x\n", i, j);

}

Пример.

#include <stdio.h>

void main()

{

int st,oc;

printf("Сколько лет Вы изучаете программирование?");

scanf("%d",&st);

printf("Какую оценку Вы получили на экзамене?");

scanf("%d",&oc);

printf("Для того, чтобы прилично изучить язык C++,\

Вам понадобится %d - %d лет.\n",10-oc,50-st-oc);

}

Пример.

#include <stdio.h>

void main()

{

int data,month,year;

char name[15],town[15];

printf("Как вас зовут? "); scanf("%s",name);

printf("Укажите дату, месяц и год вашего рождения.\n");

printf("Дата: "); scanf("%d",&data);

printf("Месяц (числом): "); scanf("%d",&month);

printf("Год: "); scanf("%d",&year);

printf("В каком городе? "); scanf("%s",town);

printf("Вот мы о вас и узнали кое-что. А именно... \n");

printf("Вас зовут %s \n",name);

printf("Вы родились в городе %s (%d.%d.%d)",

town,data,month,year);

}

Результат работы программы:

Как вас зовут? Иван

Укажите дату, месяц и год вашего рождения.

Дата: 14

Месяц (числом): 10

Год: 1986

В каком городе? Москва

Вот мы о вас и узнали кое-что. А именно...

Вас зовут Иван

Вы родились в городе Москва (14.10.1986)

Разделители

Символами-разделителями являются символы пробела, табуляции, новой строки, возврата каретки, вертикальной табуляции и перевода страницы.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...