Язык программирования си printf

Ввод-вывод в Си

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

Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h . Эта библиотека содержит функции

Вывод информации

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

Общая форма записи функции printf() :

СтрокаФорматов состоит из следующих элементов:

  • управляющих символов;
  • текста, представленного для непосредственного вывода;
  • форматов, предназначенных для вывода значений переменных различных типов.

Объекты могут отсутствовать.

Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.

Основные управляющие символы:

  • ‘\n’ — перевод строки;
  • ‘\t’ — горизонтальная табуляция;
  • ‘\v’ — вертикальная табуляция;
  • ‘\b’ — возврат на символ;
  • ‘\r’ — возврат на начало строки;
  • ‘\a’ — звуковой сигнал.

Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:

  • %d — целое число типа int со знаком в десятичной системе счисления;
  • %u — целое число типа unsigned int ;
  • %x — целое число типа int со знаком в шестнадцатеричной системе счисления;
  • %o — целое число типа int со знаком в восьмеричной системе счисления;
  • %hd — целое число типа short со знаком в десятичной системе счисления;
  • %hu — целое число типа unsigned short ;
  • %hx — целое число типа short со знаком в шестнадцатеричной системе счисления;
  • %ld — целое число типа long int со знаком в десятичной системе счисления;
  • %lu — целое число типа unsigned long int ;
  • %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
  • %f — вещественный формат (числа с плавающей точкой типа float );
  • %lf — вещественный формат двойной точности (числа с плавающей точкой типа double );
  • %e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);
  • %c — символьный формат;
  • %s — строковый формат.

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

Вывод в Си

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

Тот же самый код может быть представлен с использованием одного вызова printf :

Табличный вывод

При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:

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

Результат выполнения

В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

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

Ввод информации

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

Строка форматов аналогична функции printf() .
Для формирования адреса переменной используется символ амперсанд ‘&’ :
адрес = &объект

Строка форматов и список аргументов для функции обязательны.

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
#include // для перехода на русский язык
int main()
float y;
system( «chcp 1251» ); // переходим в консоли на русский язык
system( «cls» ); // очищаем окно консоли
printf( «Введите y: » ); // выводим сообщение
scanf( «%f» , &y); // вводим значения переменной y
printf( «Значение переменной y=%f» , y); // выводим значение переменной y
getchar(); getchar();
return 0;
>

Функция scanf()

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

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

Другой вариант — воспользоваться функцией защищенного ввода scanf_s( ) , которая появилась несколько позже, но содержит тот же самый список параметров.

Источник

Язык программирования си printf

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

Формальное определение функции printf выглядит следующим образом:

printf(строка_форматирования, список_аргументов)

Первый параметр представляет строку, которая может содержать произвольный текст в двойных кавычках. Например:

Кроме стандартного текста мы можем передавать в строку специальные группы символов, которые называются управляющими последовательностями. Наиболее распространенные из них:

  • \n : перевод на новую строку
  • \t : табуляция
  • \r : возврат каретки (курсора) в начало строки
  • \\ : обратный слеш
  • \’ : одинарная кавычка
  • \» : двойная кавычка
The book "The C Programming Language" Brian Kernighan, Dennis Ritchie

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

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

% флаги ширина_поля.точность модификатор спецификатор

Из этих компонентов обязательными являются только два % и спецификатор .

Какие спецификаторы мы можем использовать:

  • %c : для вывода отдельных символов (тип char)
  • %s : для вывода строк
  • %d : для вывода целых чисел со знаком (тип int)
  • %i : для вывода целых чисел со знаком (тип int)
  • %u : для вывода целых положительных чисел (тип unsigned)
  • %f : для вывода чисел с плавающей точкой (float, double)
  • %F : для вывода чисел с плавающей точкой в верхнем регистре (float, double)
  • %e : для вывода экспоненциального представления чисел с плавающей точкой (float, double)
  • %E : для вывода экспоненциального представления чисел с плавающей точкой в верхнем регистре (float, double)
  • %g : для вывода чисел используется более короткий из форматов %e или %f
  • %G : для вывода чисел используется более короткий из форматов %E или %F
  • %o : для вывода восьмеричных чисел без знака
  • %x : для вывода шестнадцатеричных чисел
  • %X : для вывода шестнадцатеричных чисел в верхнем регистре
  • %% : для вывода знака процента

Применим несколько спецификаторов:

Значения для спецификаторов передаются через аргумент, который идет вторым параметром в функции printf.

x = 71.898598 x = 7.189860e+001 symbol = r number = 23 Hello Word 2013

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

float r = 71.8986; printf("x = %4.2f \n", r); // 71.90

Здесь спецификация преобразования представляет строку «%4.2f», где «4» — ширина поля (для вывода числа будут использоваться 4 цифры), а «2» — точность (2 цифры в дробной части).

Модификаторы позволяют конкретизировать выводимое значение. Используются следующие модификаторы:

  • h : для вывода значений short int
  • l : для вывода значений long int и unsigned long int
  • ll : для вывода значений long long int и unsigned long long int
  • L : для вывода значений long double
short r = 7100; printf("x = %hd", r);

Необязательно передавать по одному значению для вывода в функцию printf. Мы можем передавать множество значений:

printf("Name=%s \t Age=%d \t Weight=%3.2f", "Tom", 23, 63.3456);

Первый спецификатор в строке форматирования — «%s», и для него значение будет поставляться первым аргументом — строкой «Tom». Второй спецификатор — «%d», для него значение берется из второго аргумента — числа 23. И так далее.

Дополнительно можно использовать флаги, которые дополнительно позволяют управлять форматированием вывода:

  • — : указывает, что выравнивание будет идти от левого края (по умолчанию используется выравнивае справа).
  • + : если выводимое значение имеет знак (+ или -), то оно выводится. Без данного флага знак выводится только в случае отрицательного значения.
  • пробел : вставляет пробел на месте знака перед положительными числами
  • # : при использовании со спецификаторами «o», «x», «X» значение числа выводится с предшествующими символами 0, 0x или 0X. При использовании со спецификаторами «f», «g», «G» десятичная точка будет выводиться, даже если в числе нет дробной части

Пример использования флагов:

8 8 +8 010 8.000000 Tom 38 Tom 38

Источник

Читайте также:  Виды языки web программирования
Оцените статью