Программы на алгоритмических языках обычно составляются таким образом, чтобы они могли быть использованы при различных наборах входных данных. При этом входные данные не задаются в программе именованными константами или операторами присваивания, а помещаются отдельно от программы, например, в виде файла на внешнем носителе или входного потока с клавиатуры. В самой же программе предусматривается возможность ввода требуемых значений с устройств ввода (клавиатуры, магнитного диска) в оперативную память компьютера и вывода результатов вычислений из памяти на внешние носители информации (экран терминала, магнитный диск, принтер).
Под вводом данных понимаются операции передачи данных с внешних устройств ввода в оперативную память компьютера, а под выводом – из оперативной памяти на внешние устройства хранения информации.
Операции ввода и вывода данных в Си выполняются функциями стандартной библиотеки ввода-вывода, вызываемой директивой препроцессора:
#include <stdio.h>
Программист может использовать функции, входящие в эту библиотеку, или разработать собственные средства ввода-вывода и включить их в библиотеку. Благодаря такому подходу, разработчики компиляторов с языка Си могут делать их достаточно малыми и не зависящими от особенностей конкретных устройств ввода-вывода или приложений языка, поскольку учет этих особенностей возлагается на эти функции. Поэтому каждый компилятор Си снабжается пакетом таких функций, называемым стандартной библиотекой ввода-вывода.
В дальнейшем будем рассматривать функции ввода-вывода, входящие в любой компилятор Си. Эти функции можно разбить на два больших класса. К первому относится небольшое число примитивных функций ввода-вывода, называемых функциями системного уровня. На их основе строятся функции более высокого уровня, называемого стандартным или файловым уровнем.
Функции ввода-вывода стандартного уровня считывают данные со стандартного устройства ввода – клавиатуры и выводят данные на стандартное устройство вывода – экран терминала.
Стандартный ввод-вывод может быть посимвольным, строковым и форматированным.