8-900-374-94-44
[email protected]
Slide Image
Меню

С форматированный вывод – Форматированный ввод и вывод в си

Форматированный ввод-вывод в C++

В этом уроке мы вернемся к используемым ранее операторам cin и cout для рассмотрения их в организации форматированного ввода-вывода. Для управления вводом-выводом в C++
используются :

  • флаги форматированного ввода-вывода;
  • манипуляторы форматирования.

Флаги позволяют установить параметры ввода-вывода, которые будут действовать во всех последующих операторах ввода-вывода до тех пор, пока не будут отменены. Манипуляторы вставляются в операторы cin(cout) и устанавливают параметры текущего оператора ввода-вывода.

Использование флагов

Флаги позволяют включить или выключить один из параметров вывода на экран. Для установки флага вывода используется следующая конструкция языка C++:

cout.setf(ios::flag)

Для снятия флага конструкция:

cout.unsetf(ios::flag)

Здесь flag — имя конкретного флага.

Если при выводе необходимо установить несколько флагов, то можно воспользоваться арифметической операцией «или» (|). В этом случае конструкция языка C++ будет такой:

cout.setf(ios::flag1 | ios::flag2 | ios::flag3)

В данном случае flag1, flag2, flag3 — имена устанавливаемых флагов вывода. В таблице ниже приведены некоторые флаги форматного вывода с примерами их использования.

ФлагОписаниеПример использованияРезультат
rightВыравнивание по правой границе 

int r=—25;
cout.setf(ios::right);
cout.width(15);
cout<<«r=»<<r<<endl;

 

r=-25
leftВыравнивание по левой границе (по умолчанию)  

double r=—25.45;
cout.setf(ios::left);
cout.width(50);
cout<<«r=»<<r<<endl;

 

r=-25.45
boolalphaВывод логических величин в текстовом виде 

bool a=true;
cout<<a<<endl;
cout.setf(ios::boolalpha);
cout<<a<<endl;

 

1
true
decВывод величин в десятичной системе счисления (по умолчанию) 

int r=—25;
cout<<«r=»<<r<<endl;

 

r=-25
octВывод величин в восьмеричной системе счисления (для этого нужно снять флаг вывод в десятичной) 

int p=23;
cout.unsetf(ios::dec);
cout.setf(ios::oct);
cout<<«p=»<<p<<endl;

 

p=27
hexВывод величин в шестнадцатеричной системе счисления (для этого нужно снять флаг вывод в десятичной) 

int p=23;
cout.unsetf(ios::dec);
cout.setf(ios::hex);
cout<<«p=»<<p<<endl;

 

p=17
showbaseВыводить индикатор основания системы счисления 

int r=—25;
cout.unsetf(ios::dec);
cout.setf(ios::hex|ios::showbase);
cout<<«p=»<<p<<endl;

 

p=0x17
uppercaseИспользовать прописные буквы в шестнадцатеричных цифрах 

int p=29;
cout.unsetf(ios::dec);
cout.setf(ios::hex|ios::uppercase);
cout<<«p=»<<p<<endl;

 

p=1D
showposВыводить знак + для положительных чисел 

int p=29;
cout.setf(ios::showpos);
cout<<«p=»<<p<<endl;

 

p=+29
scientificЭкспоненциальная форма вывода вещественных чисел 

double p=146.673;
cout.setf(ios::scientific);

cout<<«p=»<<p<<endl;

 

p=1.466730e+002
fixedФиксированная форма вывода вещественных чисел (по умолчанию) 

double p=146.673;
cout.setf(ios::fixed);
cout<<«p=»<<p<<endl;

 

p=146.673

Флаги удобно использовать в тех случаях, когда следует изменить параметры всех последующих операторов ввода-вывода. Использование большего количества флагов для управления одним оператором ввода-вывода не совсем удобно. Еще одним способом форматирования является использование манипуляторов непосредственно в операторах cin и cout.

Использование манипуляторов форматирования

Манипуляторы встраиваются непосредственно в операторы ввода-вывода. С одним из них (endl) вы уже знакомы. В таблице ниже приведены основные манипуляторы форматирования с примерами. Для корректного их использования необходимо подключить библиотеку

iomanip с помощью оператора #include <iomanip>

МанипуляторОписаниеПример использованияРезультат
setw(n)Определяет ширину поля вывода в n символов 

int r=—253;
cout.setf(ios::fixed);
cout<<«r=»<<setw(10)<<r<<endl;

 

r=253
setprecision(n)Определяет количество цифр (n-1) в дробной части числа 

double p=1234.6578;
cout.setf(ios::fixed);
cout<<«p=»<<setw(15)<<setprecision(3)<<p<<endl;

 

p=1234.658
leftВыравнивание по левой границе (по умолчанию) 

int r=—25;
cout.width(15);
cout<<«r=»<<setw(15)<<left<<r<<endl;

 

r=-25
rightВыравнивание по правой границе 

int r=—25;
cout.width(15);
cout<<«r=»<<setw(15)<<right<<r<<endl;

 

r=-25
boolalphaВывод логических величин в текстовом виде 

bool a=true;
cout<<boolalpha<<a<<endl;

 

true
noboolalphaВывод логических величин в числовом виде 

bool a=true;
cout<<noboolalpha<<a<<endl;

 

1
decВывод величин в десятичной системе счисления (по умолчанию) 

int r=0253;
cout<<«r=»<<dec<<r<<endl;

 

r=171
octВывод величин в восьмеричной системе счисления (для этого нужно снять флаг вывод в десятичной) 

int r=253;
cout<<«r=»<<oct<<r<<endl;

 

r=375
hexВывод величин в шестнадцатеричной системе счисления (для этого нужно снять флаг вывод в десятичной) 

int r=253;
cout<<«r=»<<hex<<r<<endl;

 

r=fd
showbaseВыводить индикатор основания системы счисления 

int p=253;
cout<<«p=»<<hex<<uppercase<<showbase<<p<<endl;

 

p=0XFD
noshowbaseНе выводить индикатор основания системы счисления 

int p=253;
cout<<«p=»<<hex<<nouppercase<<showbase<<p<<endl;

 

p=FD
uppercaseИспользовать прописные буквы в шестнадцатеричных цифрах 

int p=253;
cout<<«p=»<<hex<<uppercase<<p<<endl;

 

p=FD
nouppercaseИспользовать строчные буквы в шестнадцатеричных цифрах  

int p=253;
cout<<«p=»<<hex<<nouppercase<<p<<endl;

 

p=fd
showposВыводить знак + для положительных чисел 

int p=29;
cout<<«p=»<<showpos<<p<<endl;

 

p=+29
noshowposНе выводить знак + для положительных чисел 

int p=29;
cout<<«p=»<<noshowpos<<p<<endl;

 

p=29
scientificЭкспоненциальная форма вывода вещественных чисел 

double p=146.673;
cout<<«p=»<<scientific<<p<<endl;

 

p=1.466730e+002
fixedФиксированная форма вывода вещественных чисел (по умолчанию) 

cout<<«p=»<<fixed<<p<<endl;

 

p=146.673
setfill(c)Установить символ c как заполнитель 

cout<<«x=»<<right<<setw(10)<<setprecision(4)<<setfill(‘!’)<<(float) 1/7<<endl;
cout<<«x=»<<left<<setw(10)<<setprecision(4)<<setfill(‘!’)<<(float) 1/7<<endl;

 

x=!!!!0.1429 x=0.1429!!!!

Другими способами управления шириной поля вывода с помощью операторов являются:

  • cout.width(n) — устанавливает ширину поля вывода — n позиций;
  • cout.presicion(m) — определяет m цифр в дробной части числа;

При использовании операторов cin и cout фактически происходит ввод-вывод в текстовый файл. При вводе текстовым файлом является клавиатура, а при выводе — экран дисплея. Cin и cout фактически являются именами потоков (о них мы поговорим в следующих уроках), которые отвечают за ввод и вывод в текстовый файл. Поэтому многие рассмотренные возможности форматированного ввода-вывода будут использоваться и при обработке текстовых файлов.


Похожие записи:

kvodo.ru

Go | Форматированный вывод

Форматированный вывод

Последнее обновление: 15.01.2018

Ряд возможностей по чтению и записи файлов предоставляет пакет fmt. Этот пакет предоставляет ряд функций для записи данных в произвольный объект, который реализует интерфейс io.Writer: fmt.Fprint(), fmt.Fprintln() и fmt.Fprintf().

Функции Fprint и Fprintln

Функции Fprint и Fprintln имеют примерно одинаковое определение:


func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)

Первым параметром передается объект, который реализует интерфейс io.Writer. А второй параметр представляет набор объектов, которые записываются в поток. Обе функции возвращают количество записанных байтов и информацию об ошибке. Отличием функции Fprintln является то, что она добавляет при выводе перевод строки, то есть фактически записывает строку. Например:


package main
import (
	"fmt"
	"os"
)

func main() {
	file, err := os.Create("confeve.txt")
	if err != nil{
		fmt.Println(err) 
        os.Exit(1) 
	}
	defer file.Close() 
	fmt.Fprint(file, "Сегодня ")
	fmt.Fprintln(file, "хорошая погода")
}

В данном случае обе функции записывают некоторый текст в файл confeve.txt, который будет создан в той же папке, где расположен выполняемый скрипт.

Форматирование и Fprintf

Функция Fprintf упрощает запись сложных по структуре данных:


func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

Первым параметром также идет объект io.Writer. Второй параметр представляет строку форматирования, которая указывает, как данные будут форматироваться при записи. И третий параметр — набор значений, которые передаются в строку форматирования и записываются в поток вывода.

Строка форматирования представляет набор спецификаторов. Каждый спецификатор представляет набор символов, которые интерпретируются определенным образом и предваряются знаком процента %. Каждый спецификатор представляет определенный тип данных:

  • %t: для вывода значений типа boolean (true или false)

  • %b: для вывода целых чисел в двоичной системе

  • %c: для вывода символов, представленных числовым кодом

  • %d: для вывода целых чисел в десятичной системе

  • %o: для вывода целых чисел в восьмеричной системе

  • %q: для вывода символов в одинарных кавычках

  • %x: для вывода целых чисел в шестнадцатиричной системе, буквенные символы числа имеют нижний регистр a-f

  • %X: для вывода целых чисел в шестнадцатиричной системе, буквенные символы числа имеют верхний регистр A-F

  • %U: для вывода символов в формате кодов Unicode, например, U+1234

  • %e: для вывода чисел с плавающей точкой в экспоненциальном представлении, например, -1.234456e+78

  • %E: для вывода чисел с плавающей точкой в экспоненциальном представлении, например, -1.234456E+78

  • %f: для вывода чисел с плавающей точкой, например, 123.456

  • %F: то же самое, что и %f

  • %g: для длинных чисел с плаващей точкой используется %e, для других — %f

  • %G: для длинных чисел с плаващей точкой используется %E, для других — %F

  • %s: для вывода строки

  • %p: для вывода значения указателя — адреса в шестнадцатеричном представлении

Также можно применять универсальный спецификатор %v, который для типа boolean аналогичен %t, для целочисленных типов — %d, для чисел с плавающей точкой — %g, для строк — %s.

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

Для чисел с плавающей точкой можно указать точность или количество символов в дробной части. Для этого количество символов указывается после точки: %.2f — две цифры в дробной части после точки. Например, варианты форматирования чисел с плавающей точкой:

  • %f: точность и ширина значения по умолчанию

  • %9f: ширина — 9 символов и точность по умолчанию

  • %.2f: ширина по умолчанию и точность — 2 символа

  • %9.2f: ширина — 9 и точность — 2

  • %9.f: ширина — 9 и точность — 0

Также из флагов следует отметить дефис -, который дополняет значение пробелами не справа, как по умолчанию, а слева.

Применим функцию Fprintf для вывода в файл:


package main
import (
	"fmt"
	"os"
)
type person struct { 
   name string 
   age int32 
   weight float64 
}
func main() {
	tom := person {
		name:"Tom",
		age: 24,
		weight: 68.5,
	}
	file, err := os.Create("person.dat")
	if err != nil{
		fmt.Println(err) 
        os.Exit(1) 
	}
	defer file.Close() 
	fmt.Fprintf( file, 
               "%-10s %-10d %-10.3f\n", 
               tom.name, tom.age, tom.weight)
}

Функция Fprintf() в качестве первого параметра также принимает файл, а в качестве второго параметра — строку форматирования, которая определяет, как данные будут форматироваться. После строки форматирования перечисляются значения, которые вставляются вместо спецификаторов. При этом значения передаются на место спецификаторов по позиции. Например, первое значение передается вместо первого спецификатора, второе значение — вместо второго спецификатора и так далее. При этом значения должны соответствовать спецификаторам по типу: на место спецификатора %s должна передаваться строка, на место %d — целое число и т.д.

Таким образом, в примере выше будет создан в одной папке со скриптом файл person.dat, в который будет записаны данные объекта person.

metanit.com

Форматированный вывод, форматирование строк | Python

Старый способ — строковый оператор форматирования

Оператор % по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него:

string % value

Такой способ форматирования считается старым видимо потому, что заимствован из функции printf() языка C, а в Python кроме него появились более продвинутые средства форматирования вывода. Однако в ряде случаев использование оператора % бывает удобнее, чем использование строкового метода format().

Следует отметить, что форматируются строки, а не вывод. На вывод передается уже сформированная строка.

Как вывести вещественное число с необходимой точностью

Оператор деления / возвращает вещественное число. Если количество знаков бесконечно, то Python выведет его в таком виде: 

>>> 4 / 3
1.3333333333333333

Обычно требуется лишь определенное количество знаков. Для этого в строку записывают комбинацию символов, начинающуюся с %. Число после точки обозначает количество знаков после запятой. Символ f обозначает вещественный тип данных float.

>>> "%.4f" % (4/3)
'1.3333'

Ставить скобки обязательно, иначе операция % выполняется раньше /:

>>> "%.4f" % 4/3
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    "%.4f" % 4/3
TypeError: unsupported operand type(s) for /: 'str' and 'int'

Оператор форматирования строк выполняет округление, а не урезание:

>>> "%.4f" % (1.33335)
'1.3334'
>>> "%.4f" % (1.33334)
'1.3333'

С функцией print():

>>> print("Number %.4f" % (1.33334))
Number 1.3333
>>> print("%.4f, %.2f" % (1.33334, 153*0.43))
1.3333, 65.79
>>> print("%f, %f" % (1.33334, 153*0.43))
1.333340, 65.790000
>>> 153*0.43
65.78999999999999

Вывод символа по номеру

>>> "%c" % 121
'y'
>>> "%c" % 189
'½'
>>> "%c" % 255
'ÿ'
>>> "%c" % 999
'ϧ'
>>> "%c" % 32400
'纐'

Если вместо символа ‘c’ использовать ‘d’, будет вставлено само целое число.

Вставка в строку значений через ключ словаря

>>> '%(1)s, %(2).3f' % {'1': 'AB', '2': 2.33333}
'AB, 2.333'

Новый способ форматирования — метод format()

Строковый метод format() возвращает отформатированную версию строки, заменяя идентификаторы в фигурных скобках. Идентификаторы могут быть позиционными, числовыми индексами, ключами словарей, именами переменных.

Аргументов в format() может быть больше, чем идентификаторов в строке. В таком случае оставшиеся игнорируются.

Идентификаторы могут быть либо индексами аргументов, либо ключами:

>>> "{}, {} and {}".format('one', 1, 'I')
'one, 1 and I'
>>> "{1}, {2} and {0}".format('one', 1, 'I')
'1, I and one'
>>> nums = [3, 4, 5, 6, 2, 0]
>>> "{}{}{}".format(*nums)
'345'
>>> "{0}{2}{4}".format(*nums)
'352'
>>> u = {'name':'bob','age':35}
>>> '{name}-{age}'.format(**u)
'bob-35'
>>> '{name}'.format(**u)
'bob'
>>> '{name}-{age}'.format(name="pi",age=3.14)
'pi-3.14'
>>> '{0}-{age}'.format("sin",**u)
'sin-35'

Вывод атрибутов объекта:

>>> class house:
	size = "big"
	street = "main"
 
>>> h = house()
>>> '{0.size}, {0.street}'.format(h)
'big, main'

Можно задавать ширину поля и выравнивание:

>>> '{name:10}-{age:3}'.format(**u)
'bob       - 35'
>>> '{name:>10}-{age:>3}'.format(**u)
'       bob- 35'
>>> '{name:^10}-{age:^3}'.format(**u)
'   bob    -35 '

Вывод вещественных чисел:

>>> '{0}'.format(4/3)
'1.3333333333333333'
>>> '{0:f}'.format(4/3)
'1.333333'
>>> '{0:.2f}'.format(4/3)
'1.33'
>>> '{0:10.2f}'.format(4/3)
'      1.33'
>>> '{0:10e}'.format(4/3)
'1.333333e+00'

Выравнивание строк другими строковыми методами

>>> a = "Hello"
>>> a.center(10)
'  Hello   '
>>> a.rjust(10)
'     Hello'
>>> a.ljust(10)
'Hello     '
>>> a.ljust(10,'.')
'Hello.....'
>>> a.center(10,'.')
'..Hello...'
>>> "%s" % (a.center(19))
'       Hello       '

pythoner.name

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *