Организация ввода-вывода информации

Прежде чем программы смогут работать с данными, вам придется предусмотреть способ, посредством которого они будут попадать в компьютер. Поэтому ясно, что программам на С требуются функции, позволяющие им воспринимать данные и отображать результаты в доступной для чтения форме. В совокупности такие функции называются функциями ввода-вывода или обозначаются аббревиатурой I/O (Input/Output).

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

Для поддержки символьно-ориентированного ввода-вывода все реализации языка С включают в себя функции printf (форматированный вывод) и scanf (форматированный ввод). Термин форматированный употреблен здесь в том смысле, что указанные функции обеспечивают заданные автоматические преобразования форматов данных. Для использования функций printf и scanf в программу необходимо вставить команду препроцессора #include <stdio.h>.Функции printf и scanfимеют переменное число аргументов. Числа и типы аргументов должны соответствовать спецификациям преобразования в форматной (символьной) строке.

 

Функция форматированного вывода printf(записать аргументы в стандартный файл вывода в соответствии с форматной строкой).

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

<format> [, argument1]...

Здесь format - это управляющая строка (строка символов), задающая требуемые при вводе форматные преобразования.

В общем случае format описывается строкой со следующей структуры:

%[flags] [width] [.precision] [{h | l | I64 | L}]type

Прежде чем рассматривать указанные элементы формата заметим, что обязательными являются только % и type.

type (в русскоязычной литературе – спецификатор) может принимать значения в соответствии с таблицей:

type Результат Образец
%c Одиночный символ ‘?’
%d Десятичное целое число
%e Число с плавающей точкой в экспоненциальном представлении 3.500e+000
%E Число с плавающей точкой в экспоненциальном представлении 3.500E+000
%f Число с плавающей точкой в десятичном представлении 3.5
%g Используют %f или %e в зависимости от значения. %e используется, если показатель меньше чем –4 или больше либо равен заданной точности.  
%G То же, только для %E.  
%i Десятичное целое число со знаком
%o Восьмеричное целое число без знака
%p Указатель (адрес памяти) 0064FDF4
%s Строка символов “Str”
%u Десятичное целое число без знака
%x Шестнадцатеричное целое число без знака (с цифрами abcdef) 1f
%X Шестнадцатеричное целое число без знака (с цифрами ABCDEF) 1F
%% Печать знака процента  

 

Каждая реализация языка может расширять предложенный в таблице список. Форматы %E, %G, %i, %p и %X встречаются не во всех реализациях языка.

Все прочие элементы строки формата называются модификаторами и служат для уточнения формы представления информации при выводе.

В следующей таблице представлены варианты элемента flags.

Флаг Значение Образец
Определяет выравнивание по левому краю %–20s
+ Печатать знак %+d
Пробел Положительные значения печатаются без знака, но с пробелом, отрицательные со знаком «минус» % 6.2f
Для числовых форм заполняет поле по ширине нулями вместо пробелов. Этот флаг игнорируется, если указан флаг «–» или указана точность для целочисленной формы %010d, %08.3f
# Вывод первого 0 для восьмеричных, 0x или 0X для 16-ых. Для всех форм с плавающей точкой гарантируется вывод символа десятичной точки. Для форм %g %G предотвращает удаление заключительных нулей. %#o, %#8.0f, %+#10.3E

Модификатор формата width (ширина) представляется целым положительным числом и служит для указания минимального количества выводимых символов. Если количество символов выводимого значения меньше width, поле будет дополняться символами в соответствии с указанными флагами. Значение width никогда не ограничивает выводимое значение.

Модификатор формата .precision (точность) используется для чисел с плавающей точкой. Точность представляется неотрицательным целым числом, следующим за точкой и задает либо количество символов, которое должно быть выведено, либо количество цифр в дробной части числа, либо количество значащих цифр.

Возвращаемое значение функции printf. Как обычная функция языка С printf объявлена функцией возвращающей целое значение. При нормальном выполнении, когда все заказанные преобразования удается выполнить, в качестве результирующего значения возвращается общее число выведенных байтов. При возникновении невыполнимых преобразований возвращается отрицательное значение.

Функция форматированного ввода информации scanf(записать аргументы в стандартный файл ввода в соответствии с форматной строкой)

В целом функция вода scanf очень похожа на функцию printf. Она также использует строку, задающую необходимые форматные преобразования. Главное различие этих функций заключается в списке параметров. Функция printf использует имена переменных, константы и выражения. Функция scanf в качестве параметров использует только указатели на переменные, т.е. адреса заполняемых переменных.

- для ввода значения для одного из основных типов переменной, перед именем переменной ставьте символ &;

- для ввода строки в символьный массив, знак & не ставится.

Информация, принимаемая функцией scanf, поступает в виде потока символов, набираемых на клавиатуре. Среди них могут быть и служебные символы, такие как табуляция, пробел, символ перевода строки и т. п. Эти символы позволяют разделить поток ввода на отдельные поля. Это соответствует последовательным применениям спецификаций преобразований к последовательным полям, с пропуском служебных символов между ними. Единственное исключение составляет спецификатор преобразования %c, который читает каждый следующий символ, даже если этот символ является служебным.








Дата добавления: 2016-04-14; просмотров: 823;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.