Задачи ввода/вывода в языке Си решают функции 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 выводит не значащие нули. Для форм с плавающей точкой гарантировано печатается точка, даже если десятичных знаков нет |
| флаг | для числовых форм вместо пробелов на свободные экранные места выводятся нули |
Ввод данных осуществляется с помощью функции 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 |






