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

Спецификатор точности

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

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

Когда спецификатор точности применяется к целым типам, он указывает минимальное число цифр, отводимых под каждое число. Для достижения требуемой длины к числу добавляются нули. Следующая программа иллюстрирует применение спецификатора точности: #include <stdio.h> int main (void) { printf ("%. 4f\n\",123.1234567); printf("%3.8d\n", 1000); printf("%10.15 s\n", "This is a simple test."); return 0; } В результате ее работы получаем: 123.1235 00001000 This is a simpl

Выровненный вывод

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

Следующая программа демонстрирует выравнивание по левому краю: #include <stdio.h> int main (void) { printf("right-justified:%8d\n", 100); printf ("left-justified: %-8d\n", 100); return 0; }

Работа с другими типами данных

Имеется два модификатора формата, позволяющие функции printf() выводить короткие и длинные целые. Эти модификаторы могут применяться к спецификаторам типа d, i, о, u и х. Модификатор l сообщает функции printf() о том, что далее следует длинный тип данных. Например, %ld означает, что будет выводиться значение типа long int. Модификатор h говорит функции printf() о необходимости вывода коротких целых. Например, %hu выводит данные типа short unsigned int.

Модификатор L может стоять перед спецификаторами плавающего типа е, f и g, тем самым указывая, что далее следуют переменные типа long double.

Модификаторы * u #

Функция printf() поддерживает два дополнительных модификатора для некоторых спецификаторов формата: * и #.

Помещение # перед g, G, f, Е или е обеспечивает наличие десятичной точки в случае отсутствия дробной части. Если перед спецификаторами формата х или X поставить #, то шестнадцатиричное число будет печататься с префиксом 0х. Если перед спецификатором о поместить #, то выведенное число будет иметь в начале 0. Нельзя применять # к остальным спецификаторам формата.

Помимо констант, спецификаторы минимальной ширины поля и точности могут предоставляться аргументами printf(). Для реализации этого следует использовать *. Когда форматная строка сканируется, функция printr() будет сопоставлять со звездочкой аргументы в порядке появления. Например, printf("%*.*f", 10,4,123.3); минимальная ширина поля равна 10, точность - 4, а вводимое значение  123.3

Следующая программа демонстрирует использование # и * #include <stdio.h> int main(void) { printf("%х %#x\n", 10, 10); printf("%*.*f", 10, 4, 1234.34); return 0; }

scanf()

Стандартный ввод с консоли, как правило, осуществляется с помощью scanf(). Она читает все стандартные типы данных и автоматически преобразует числа к правильному внутреннему формату. Чем-то она похожа на свою противоположность printf(). Стандартный вид scanf() следующий: int scanf(const char * форматная_строка,..); форматная_строка определяет способ чтения значений в переменные, на которые указывает список аргументов.

Форматная строка состоит из трех типов символов:

  • Спецификаторы формата

  • Специальные символы

  • Стандартные символы

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]