Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Операторы ввода-вывода в языке Си (C)

Функция форматного вывода printf()

Оператор вызова этой функции имеет вид:

printf(форматная_строка, список_вывода)

Список вывода содержит перечисленные через запятую имена выводимых переменных, т. е. показывает, что выводить. В список вывода можно включать не только переменные, но и произвольные выражения (в частном случае константы).

Форматная строка показывает, в каком виде значения переменных будут выведены на экран. В простейшем случае форматная строка - это строковая константа, т. е. она ограничена двойными кавычками. Форматная строка может содержать:

произвольный текст (обычно он поясняет значения выводимых переменных); среди символов этого текста могут быть и управляющие; в несложных программах этого пособия часто будет использоваться управляющий символ '\n' ;

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

Спецификация формата вывода или ввода

В простейшем виде спецификация формата имеет вид:

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

Ширина поля - положительное целое число, задающее минимальное количество позиций, занимаемых выводимым значением; если число символов в выводимом значении меньше, чем ширина поля, то выводимое значение дополняется пробелами до минимальной длины; если число символов в выводимом значении больше ширины поля или ширина поля не задана, то печатаются все символы значения (ширина поля игнорируется).

Точность - положительное целое число, указывается в основном для вещественных чисел, означая в этом случае количество выводимых после десятичной точки цифр.

На первых этапах обучения программированию достаточно следующих спецификаторов:

d - для целых значений (типов int, char, unsigned);

f - для вещественных значений (типов float, double);

e - для вещественных значений (типов float, double)с указанием порядка, т. е. в виде:

Другие примеры оператора printf() представлены на рис.1.

Функция форматного ввода scanf()

Оператор вызова этой функции имеет вид:

scanf(форматная_строка, список_ввода)

Список ввода показывает, что выводить. Он содержит перечисленные через запятую адреса вводимых переменных. Почему адреса, а не имена переменных станет понятно после знакомства с функциями Си (часть I I пособия). Записать адрес переменной нетрудно, используя операцию & (см. таблицу 3). В список ввода не могут входить выражения или константы, так как ввод предполагает изменение значения.

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

Пример функции scanf:

int i; float a;

printf("Введите i и a\n"); /* вывод приглашения к вводу */

scanf("%d%f", &i, &a);...

Форма ввода :

Введите i и a

В фигурные скобки принято заключать альтернативные фрагменты формы ввода или вывода. В данном примере значения i и a можно располагать на одной строке экрана, разделяя их пробелами, а можно на разных строках, разделяя их нажатием клавиши Enter.

Заметим также, что при вводе строк символов с помощью функции scanf() действуют более сложные правила. Так, в буфер устройства ввода считываются все символы до нажатия Enter, а в вводимую строковую переменную передаются символы до первого пробела. Такой принцип работы scanf() имеет свои преимущества, но они слишком трудны при начальном освоении языка Си. Поэтому для ввода и вывода строк лучше пользоваться функциями gets() и puts().