Как вывести string через printf
Функция printf
Если вы пишете на C++, то лучше подключать файл cstdio :
Символ ‘\n’ в конце вывода означает символ перехода на новую строку.
Например, чтобы напечатать значения переменных a и b типа int через пробел можно использовать следующую функцию:
Выводимые типы
Перечислим разные типы данных, которые можно выводить при помощи функции printf и соответствующие им форматные строки.
Значения целых чисел также можно выводить в восьмеричной или шестнадцатеричной системах счисления.
Обратите внимание, переменную типа float вывести при помощи функции printf нельзя (можно привести значение типа float к типу double и вывести его).
В операционной системе Windows не рекомендуется использовать тип long double.
Модификаторы длины
hh | Используется для значения типа char вместе с символами d, i, u для вывода в виде десятичного числа, соотвветствующего его ASCII-коду. |
h | Используется для значения типа short int или unsigned short int вместе с модификаторами d, i, u. |
l | |
ll | Используется для значения типа long long int или unsigned long long int вместе с модификаторами d, i, u. |
L | Используется для значения типа long double вместе с модификаторами e, f, g. Не следует использовать в Windows. |
Ширина поля вывода
После знака % можно задать ширину поля для вывода в виде целого числа (не начинающегося с нуля). В этом случае число вывод этого числа будет занимать указанное число символов. Если в числе меньше цифр, чем заданная ширина поля вывода, то перед числом (слева) выводятся пробелы. Если же в числе больше цифр, чем ширина поля, то выводятся все цифры (то есть выводится больше цифр, чем вся ширина поля, поле расширяется, чтобы вывести все символы).
Если перед шириной поля поставить цифру 0, например, «%010d», то число будет дополняться слева не пробелами, а нулями. Это удобно, например, для вывода времени в формате hh:mm, что можно сделать, например, так:
Также вместо ширины поля вывода можно указать символ «*» (звездочка), тогда значение ширины поля вывода нужно передать в качестве дополнительного параметра. Например, запись:
означает вывести значение переменной a используя поле шириной n символов.
Точность вывода действительных чисел
По умолчанию действительные числа выводятся с 6 знаками после точки, при этом числа в экспоненциальной форме выводятся в виде одной цифры, точки и 6 цифр после точки (и показателя степени).
Вывод целых чисел со знаком +/-
Если при выводе целого числа в форматной строке задать символ «+», то положительные числа будут выводиться с обязательным знаком «+» перед ними.
Большинство перечисленных выше параметров комбинируются друг с другом. Например, такая строка:
означает вывод числа типа long long, со знаком «+» или «-» перед числом, с добавлением нулей таким образом, что общее число выводимых символов будет не меньше 20.
printf()
Вот прототип функции printf() :
Функция printf() возвращает число выведенных символов или отрицательное значение в случае ошибки.
В этом примере первому спецификатору преобразования ( %c ), соответствует символ ‘C’, а второму ( %s ), — строка «и к тому же очень сильно!».
Код | Формат |
---|---|
%a | Шестнадцатеричное в виде 0xh.hhhhp+d (только С99) |
%A | Шестнадцатеричное в виде 0Xh.hhhhP+d (только С99) |
%c | Символ |
%d | Десятичное целое со знаком |
%i | Десятичное целое со знаком |
%e | Экспоненциальное представление (‘е’ на нижнем регистре) |
%E | Экспоненциальное представление (‘Е’ на верхнем регистре) |
%f | Десятичное с плавающей точкой |
%g | В зависимости от того, какой вывод будет короче, используется %е или %f |
%G | В зависимости от того, какой вывод будет короче, используется %Е или %F |
%o | Восьмеричное без знака |
%s | Строка символов |
%u | Десятичное целое без знака |
%x | Шестнадцатеричное без знака (буквы на нижнем регистре) |
%X | Шестнадцатеричное без знака (буквы на верхнем регистре) |
%p | Выводит указатель |
%n | Аргумент, соответствующий этому спецификатору, должен быть указателем на целочисленную переменную. Спецификатор позволяет сохранить в этой переменной количество записанных символов (записанных до того места, в котором находится код %n ) |
%% | Выводит знак % |
Вывод символов
Вывод чисел
Спецификаторы преобразования %e и %E в функции printf() позволяют отображать аргумент типа double в экспоненциальном формате. В общем виде числа в таком формате выглядят следующим образом:
Применение спецификатора преобразования %g показано в следующей программе:
В результате выполнения получится следующее:
Вот что вывела эта программа:
Отображение адреса
Спецификатор преобразования %n
Модификаторы формата
Модификаторы минимальной ширины поля
Вот что выводится при выполнении этой программы:
Модификатор минимальной ширины поля чаще всего используется при создании таблиц, в которых столбцы должны быть выровнены по вертикали. Например, следующая программа выводит таблицу квадратов и кубов чисел от 1 до 19: А вот пример полученного с ее помошью вывода:
Модификаторы точности
Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.
Примененный к строкам, модификатор точности определяет максимальную длину поля. Например, %5.7s означает, что длина выводимой строки будет составлять минимум пять и максимум семь символов. Если строка окажется длиннее, чем максимальная длина поля, то конечные символы выводиться не будут.
Если модификатор точности применяется к целым типам, то он определяет минимальное количество цифр, которые будут выведены для каждого из чисел. Чтобы получилось требуемое количество цифр, добавляется некоторое количество ведущих нулей.
В следующей программе показано, как можно использовать модификатор точности:
Вот что выводится при выполнении этой программы:
Выравнивание вывода
В следующей программе показано, как применяется выравнивание по левому краю:
И вот что получилось:
Обработка данных других типов
На заметку | В составе С99 имеются некоторые дополнительные модификаторы типа для функции printf() ; о них рассказывается в части II. |
Модификатор * и #
В следующей программе показано применение обоих модификаторов # и * :
Рис. 8.1. Обратите внимание на то, каким образом звездочке (*) ставится в соответствие определенное значение
Форматированный ввод и вывод
Форматированный вывод
Сегодня мы рассмотрим две важные функции форматированного ввода и вывода. Устройство и работу этих функций полностью можно понять только после изучения работы с указателями и функций с переменным числом параметров. Но пользоваться этими функциями необходимо уже сейчас, так что некоторые моменты придётся пропустить.
Функция проходит по строке и заменяет первое вхождение % на первый аргумент, второе вхождение % на второй аргумент и т.д. Далее мы будем просто рассматривать список флагов и примеры использования.
Общий синтаксис спецификатора формата
%[флаги][ширина][.точность][длина]спецификатор
Спецификатор – это самый важный компонент. Он определяет тип переменной и способ её вывода.
Спецификатор | Что хотим вывести | Пример |
---|---|---|
d или i | Целое со знаком в в десятичном виде | 392 |
u | Целое без знака в десятичном виде | 7235 |
o | Беззнаковое в восьмеричном виде | 657 |
x | Беззнаковое целое в шестнадцатеричном виде | 7fa |
X | Беззнаковое целое в шестнадцатеричном виде, верхний регистр | 7FA |
f или F | Число с плавающей точкой | 3.4563745 |
e | Экспоненциальная форма для числа с плавающей точкой | 3.1234e+3 |
E | Экспоненциальная форма для числа с плавающей точкой, верхний регистр | 3.1234E+3 |
g | Кратчайшее из представлений форматов f и e | 3.12 |
G | Кратчайшее из представлений форматов F и E | 3.12 |
a | Шестнадцатеричное представление числа с плавающей точкой | -0xc.90fep-2 |
A | Шестнадцатеричное представление числа с плавающей точкой, верхний регистр | -0xc.90FEP-2 |
c | Буква | a |
s | Строка (нуль-терминированный массив букв) | Hello World |
p | Адрес указателя | b8000000 |
n | Ничего не печатает. Аргументом должен быть указатель на signed int. По этому адресу будет сохранено количество букв, которое было выведено до встречи %n | |
% | Два идущих друг за другом процента выводят знак процента | % |
Суб-спецификатор длины изменяет длину типа. В случае, если длина не совпадает с типом, по возможности происходит преобразование до нужного типа.
спецификаторы | |||||||
---|---|---|---|---|---|---|---|
Длина | d, i | u o x X | f F e E g G a A | c | s | p | n |
(none) | int | unsigned int | double | int | char* | void* | int* |
hh | signed char | unsigned char | signed char* | ||||
h | short int | unsigned short int | short int* | ||||
l | long int | unsigned long int | wint_t | wchar_t* | long int* | ||
ll | long long int | unsigned long long int | long long int* | ||||
j | intmax_t | uintmax_t | intmax_t* | ||||
z | size_t | size_t | size_t* | ||||
t | ptrdiff_t | ptrdiff_t | ptrdiff_t* | ||||
L | long double |
Форматированный ввод
Как и в printf, ширина, заданная символом * ожидает аргумента, который будт задавать ширину. Флаг длина совпадает с таким флагом функции printf.
Кроме функций scanf и printf есть ещё ряд функций, которые позволяют получать вводимые данные
Это не полный набор различных функций символьного ввода и вывода. Таких функций море, но очень многие из них небезопасны, поэтому перед использованием внимательно читайте документацию.
Непечатные символы
В си определён ряд символов, которые не выводятся на печать, но позволяют производить форматирование вывода. Эти символы можно задавать в виде численных значений, либо в виде эскейп-последовательностей: символа, экранированного обратным слешем.
Синтаксис
Параметры
format
Формат объекта.
argument
Необязательные аргументы.
locale
Используемый языковой стандарт.
Возвращаемое значение
Комментарии
Функция wprintf — это версия printf с расширенными символами; format — строка расширенных символов. wprintf и printf ведут себя одинаково, если поток открыт в режиме ANSI. Функция printf на данный момент не поддерживает вывод данных в поток в кодировке Юникод.
Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.
Аргумент format состоит из обычных символов, escape-последовательностей и (если за format следуют аргументы) спецификаций формата. Обычные символы и escape-последовательности копируются в stdout в порядке их отображения. Например, в строке
выводятся следующие выходные данные:
Спецификации формата всегда начинаются со знака процента ( ) и читаются слева направо. Когда функция printf обнаруживает первую спецификацию формата (если таковые имеются), она преобразует значение первого после format аргумента и выводит его соответствующим образом. Вторая спецификация формата вызывает преобразование второго аргумента и его вывод и т. д. Если число аргументов превышает количество спецификаций формата, лишние аргументы игнорируются. Если число аргументов меньше количества спецификаций формата, результаты будут не определены.
Убедитесь, что format не является строкой, определяемой пользователем.
Универсальное текстовое сопоставление функций
Tchar.h ассемблер | _UNICODE и _MBCS не определено | _MBCS определяется | _UNICODE определяется |
---|---|---|---|
_tprintf | printf | printf | wprintf |
_tprintf_l | _printf_l | _printf_l | _wprintf_l |
Требования
Ввод-вывод в Си
Основной задачей программирования является обработка информации, поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.
Вывод информации
Функция printf() предназначена для форматированного вывода. Она переводит данные в символьное представление и выводит полученные изображения символов на экран. При этом у программиста имеется возможность форматировать данные, то есть влиять на их представление
на экране.
Общая форма записи функции printf() :
СтрокаФорматов состоит из следующих элементов:
Объекты могут отсутствовать.
Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.
Основные управляющие символы:
Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:
Результат работы программы
Тот же самый код может быть представлен с использованием одного вызова printf :
Табличный вывод
При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:
В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.
Ввод информации
Функция форматированного ввода данных с клавиатуры scanf() выполняет чтение данных, вводимых с клавиатуры, преобразует их во внутренний формат и передает вызывающей функции. При этом программист задает правила интерпретации входных данных с помощью спецификаций форматной строки.
Общая форма записи функции scanf( ) :
Строка форматов и список аргументов для функции обязательны.
Результат работы программы:
Функция scanf( ) является функцией незащищенного ввода, т.к. появилась она в ранних версиях языка Си. Поэтому чтобы разрешить работу данной функции в современных компиляторах необходимо в начало программы добавить строчку
Комментариев к записи: 96
#include
#include
#include
#include
int main() <
int a[4][5];
int i,j,range,max,maxi,maxj;
float kproiz1,kproiz2;
int proiz1=1;
int proiz2=1;