Лекция
Привет, сегодня поговорим про форматированный ввод/вывод в языке си, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое форматированный ввод/вывод в языке си , настоятельно рекомендую прочитать все из категории Алгоритмизация и программирование. Структурное программирование. Язык C.
Задачи ввода/вывода в языке Си решают функции printf() и scanf().
Операторы вывода используются для вывода значений переменных и текста.
Тексты в Си записываются в кавычках. В языке Си отсутствует специальный тип для работы со строками. Вместо этого строки представляются как массив типа char. Элементы строки, хранясь в массиве, записываются в смежные ячейки памяти. В конце строки ставится отметка \0. Наличие этой отметки говорит о том, что строка должна иметь размер на единицу больший, чем количество символов. Объявляется строка указанием типа char и записью размера в [].
Пример:
char name[40];
Для работы со строками к программе необходимо подключить файл string.h.
Каждая из функций ввода/вывода использует управляющую строку и список аргументов. Управляющая строка записывается первой и заключается в кавычки. Управляющие строки и аргументы не перемешиваются. Управляющие строки прежде всего содержат указание на вывод значения того или иного типа. Их называют спецификаторами преобразования.
Спецификаторы | Действия |
%a, %A | возвращают число с плавающей точкой и 16-е цифры |
%c | возвращает одиночный символ |
%d, %i | возвращают целое число в десятичной форме |
%e, %E | возвращают число с плавающей точкой в экспоненциальной форме |
%f | возвращает число с плавающей точкой в десятичной форме |
%g | использует спецификатор %f или %e в зависимости от значения (выбирается автоматически) |
%o | возвращает восьмеричное целое число без знака |
%p | вывод указателя в шестнадцатеричном формате |
%s | возвращает строку символов |
%u | возвращает десятичное целое число без знака |
%x, %X | возвращают шестнадцатеричное целое число без знака |
%% | вывод на печать символа % |
Основную спецификацию можно модифицировать вставляя между % и символом преобразования модификаторы.
Модификаторы | Действия | |
цифра/цифры | минимальная ширина поля вывода (количество экранных символов) | |
.цифра | точность | |
h | используется при целочисленных преобразованиях для кодирования значений short int и unsigned short int | |
hh | используется при целочисленных преобразованиях для кодирования значений signed char и unsigned char | |
j | используется при целочисленных преобразованиях для получения типов int_max_t и uint_max_t | |
l | используется при целочисленных преобразованиях для получения типа long int и unsigned long int | |
ll | используется при целочисленных преобразованиях для получения типа long long int и unsigned long long int | |
t | используется с целью кодирования значений типа ptroliff_t, который является разностью двух указателей | |
z | используется с целью кодирования значений size_t | |
L | используется при преобразовании чисел с плавающей точкой типа long double | |
флаг | + | значения со знаком печатаются со знаком "+" или "-" |
флаг | - | элемент выравнивается по левому краю |
флаг | пробел | значение со знаком "+" печатается с пробелом, но без знака |
флаг | # | для спецификаторов %o, %x, %X выводит не значащие нули. Об этом говорит сайт https://intellect.icu . Для форм с плавающей точкой гарантировано печатается точка, даже если десятичных знаков нет |
флаг | 0 | для числовых форм вместо пробелов на свободные экранные места выводятся нули |
Ввод данных осуществляется с помощью функции scanf(). В языке Си существует несколько функций ввода. scanf() употребляется чаще других, т.к. ей присущ различный формат ввода. Также как и функция printf(), ввод использует управляющую строку, сопровождаемую списком аргументов. Управляющая строка указывает в какие форматы должен быть преобразован вводимый текст. В качестве параметров функция scanf() использует не сами переменные, а указатели на них. Для использования scanf()необходимо выполнять два правила:
1) если функция используется для считывания значений в переменную основного типа, то перед именем переменной ставится знак &.
2) если значение считывается в символьный массив, то символ & не ставится.
Преобразование одного вводимого данного осуществляется указанием спецификатора преобразования. Если данных вводится несколько, то они разделяются знаком пробела.
Спецификаторы | Действия |
%c | интерпретирует результат ввода в качестве символа |
%d | интерпретирует результат ввода как десятичное целое число со знаком |
%e, %f, %g, %a | интерпретирует результат ввода как число с плавающей точкой |
%E, %F, %G, %A | интерпретирует результат ввода как число с плавающей точкой. Все вводимые символы преобразуются в заглавные |
%o | интерпретирует результат ввода как восьмеричное целое число со знаком |
%з | интерпретирует результат ввода как указатель |
%s | интерпретирует результат ввода как строку. Ввод начинается с первого символа, не являющегося служебным и включает все символы до следующего служебного |
%u | интерпретирует результат ввода как целое число без знака |
%x, %X | интерпретирует результат ввода как шестнадцатеричное целое число со знаком |
Между знаком % и символом преобразования могут использоваться модификаторы. Если их более одного, то они должны записываться в порядке, указанном в таблице ниже:
Модификаторы | Действия |
* | подавить присваивание |
цифра/цифры | максимальная ширина поля ввода. Ввод прекращается когда указанная ширина достигнута или при обнаружении служебного символа |
hh | определяет считывание целого числа в виде signed char или unsigned char |
ll | определяет считывание целого числа в виде long long или unsigned long long |
L, l, h | определяет считывание числа в виде short int, unsigned short int, unsigned long, long, double или long double |
К сожалению, в одной статье не просто дать все знания про форматированный ввод/вывод в языке си. Но я - старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое форматированный ввод/вывод в языке си и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Алгоритмизация и программирование. Структурное программирование. Язык C
Из статьи мы узнали кратко, но содержательно про форматированный ввод/вывод в языке си
Комментарии
Оставить комментарий
Алгоритмизация и программирование. Структурное программирование. Язык C
Термины: Алгоритмизация и программирование. Структурное программирование. Язык C