Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Примечание. Аргумент, для которого указывается спецификация точности

Читайте также:
  1. Важное примечание
  2. КонсультантПлюс: примечание.
  3. ПРИМЕЧАНИЕ
  4. Примечание
  5. Примечание
  6. ПРИМЕЧАНИЕ
  7. ПРИМЕЧАНИЕ

Аргумент, для которого указывается спецификация точности, может быть только вещественного типа.

Например:

float nn=12.567;

printf("%.*f\n", 2, nn); //вывести 2 знака после точки

Результат: 12.57

· модификаторы размера, задаваемые в формате, определяют, как функция интерпретирует аргумент. Действие модификаторов показано в табл. 9.1.

Таблица 9.1 Действие модификаторов размера

Значение Формат Интерпретация
h d, i, o, u, x, X short int
l d, i, o, u, x, X long int
l E, e, f, g, G double
L E, e, f, g, G long double
L d, i, o, u, x, X _int64
h C, c 1 символьный байт
l C, c 2 символьный байт
h S, s 1 строка символов по 1 байту на символ
l S, s 1 строка символов по 2 байта на символ

Например, если мы выводим данные типа long, то должны задавать вместе c форматом d и модификатор типа l, т. е. общий вид формата будет ld.

¨ Функция scanf().

Формат:

scanf(Control, arg1, arg2,...,argn);

Функция форматного ввода с клавиатуры. Осуществляет посимвольный ввод данных с клавиатуры, преобразует их в соответствии с форматом для каждого значения, указанном в управляющей (форматной) символьной строке Control, и результат преобразования записывает в аргументы arg1, arg2,...,argn. Смысл строки Control тот же, что и для функции printf().

Так как arg1 arg2,..., argn — это выходные параметры функции, то при обращении к функции они должны задаваться своими адресами: имена массивов — именами (т. к. имена массивов — это указатели на их первые элементы), а те аргументы, что не являются указателями, задаются как &arg.

Форматная строка — это символьная строка, содержащая три типа объектов: незначащие символы, значащие символы и спецификации формата.

Незначащие символы — это пробел, знак табуляции (\t), символ nepexoда на новую строку (\n). Как только функция встречает незначащий символ в строке формата, она считывает (но не сохраняет) все последующие незначащие символы до тех пор, пока не встретится первый значащий символ (т. е. пропускает незначащие символы).

Значащие символы — это все символы кода ASCII, кроме символа %. Если функция встречает в форматной строке значащий символ, она его считывает, но не сохраняет.

Спецификация формата функции имеет вид:

%[*] [ширина] [F/N] [h/l] символ формата

После символа начала формата % в определенном порядке следуют остальные спецификации.

[*] — это необязательный символ подавления ввода: весь входной поток функция рассматривает как совокупность полей ввода: значащих символов. Если в спецификации указан символ *, то все поле, которое должно в данный момент обрабатываться функцией по заданному формату, пропускается.

Ввод происходит так: в соответствии со спецификатором ширины первого формата из входного потока выбирается очередное поле ввода (т.е. значащие символы до первого незначащего), которое интерпретируется в соответствии с форматом и записывается в соответствующий аргумент.

Если при этом запрошенная ширина оказалась меньше поля ввода, то остаток поля обрабатывается функцией по следующему формату.

Если запрошенная ширина оказалась больше поля ввода, то все поле ввода обрабатывается по данному формату.

Если же в объявлении формата присутствовал символ подавления ввода *, то все поле, предназначенное для обработки данным форматом, пропускается.

Модификаторы размера аргумента и символы форматирования функции scanf() аналогичны модификаторам и символам форматирования функции printf().

Рассмотрим пример работы функции scanf().

Допустим, задано:

int i; float x; char m[100];

На клавиатуре набираем последовательность:

56789 0123 45а72.

Выолняем:

scanf("%2d %f %*d %2s", &i, &x, m);

Как будет идти ввод?

В примере имеются три поля ввода: 56789, 0123 и 45а72. Наберем их на клавиатуре и нажмем клавишу <Enter>. Функция в соответствии с первым форматом (%2d) выбирает из первого поля первые два символа. Функция интерпретирует их как десятичное число и присваивает значение первому аргументу: i = 56.

В первом поле остались необработанными символы 789. Они попадают в работу функции по второму формату: %f. Второй аргумент получит значение х = 789. Далее должно обрабатываться поле 0123 по третьему формату, но в нем есть символ подавления. Поэтому поле пропускается и начинает обрабатываться поле 45а72 по формату %2s. Из этого поля будут выбраны только первые два символа и строка m получит значение 45.

¨ Функция sprintf().

Формат:

sprintf(string, Control,argl,arg2,...,argn);

Эта функция аналогична printf(), за исключением того, что результат своей работы она выводит не на стандартное устройство вывода, а в строку string. Это позволяет собирать в одну строку данные совершенно разных типов.

¨ Функция sscanf().

Формат:

sscanf(string, Control, argl, arg2,..., argn);

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

¨ Функция gets().

Формат:

gets(s);

Вводит строку символов с клавиатуры и записывает ее в строку s, которая может быть объявлена как char *s или char s[].

¨ Функция puts().

Формат:

puts(s);

Выводит содержимое строки s на устройство стандартного вывода (экран) (s может быть объявлена как char *s или char s [ ]).

9.2 Ввод/вывод в C++

Общие положения

 

Ввод и вывод в C++ организован с помощью так называемых поточных классов, содержащих данные и методы работы с файлами по вводу/выводу. Поточные классы происходят от общего предка— класса ios и потому наследуют его функциональность.

Чтобы начать писать программу с использованием ввода/вывода на языка C++, следует обязательно выполнить в программе #inciude <fstream>.

Класс fstream является потомком классов istream, ostream. Эти же классы являются родителями классов ifstream, ofstream. Класс fstream используется для организации ввода/вывода (т. е. чтения/записи) в один и тот же файл. Классы ifstream, ofstream используются для организации, соответственно, ввода (т. е. чтения файла) и вывода (т. е. записи в файл).

В свою очередь, экземплярами классов istream, ostream являются cin, cout, cerr, с помощью которых осуществляется так называемый стандартный ввод/вывод — ввод со стандартного вводного устройства (которым по умолчанию является клавиатура) и вывод на стандартное выводное устройстве (которым по умолчанию является экран). Таким образом, включение в программу класса fstream оказывается достаточным для организации как стандартного, так и файлового ввода/вывода.

Файловый ввод/вывод организован с помощью переопределенных в поточных классах операций включения (<<) и извлечения (>>). Ранее мы видели, что это операции сдвига влево и сдвига вправо битов в переменной типа int, но в точных классах C++ они обрели новую функциональность.

Чтобы работать с файлом, его сначала следует открыть: связать со специальной структурой, в которой задаются характеристики файла (размер буфера ввода/вывода, состояние файла, последняя прочитанная запись и т. п.). Связь эта выполняется с помощью функции open(), входящей в один из классов, который определяет ввод/вывод (fstream, istream, ostream). Поэтому, чтобы выполнить такую функцию, следует сначала создать экземпляр соответствующего класса (для получения доступа к этой функции). Если мы, например, хотим выполнять вывод в файл (т. е. запись в него), то следует создать экземпляр класса ostream: ostream exp; и затем выполнить функцию exp.ореn(). В скобках должны быть параметры этой функции: имя открываемого файла и способ открытия файла, в котором задаются сведения о том, как собирается пользователь работать с файлом (читать его, писать в него, или делать что-то еще).

После того как файл открыт, собственно для чтения или записи уже используют операции включения/извлечения (<<, >>). Если использовать пример c экземпляром ехр класса ostream, то можно записать так: exp << "строка текста" << i << j << endl;

Здесь i, j — некоторые переменные (например, int i; float j;), endl — конец вывода и переход на новую строку.

После того как работа с файлом закончена, следует закрыть файл, чтобы разорвать связь с той структурой, с которой файл был связан при его открытии. Это необходимо, чтобы дать возможность другим файлам "открываться". Этот акт выполняется с помощью метода close() того же экземпляра класса, который мы создавали, чтобы выполнить функцию open(). В нашем случае следовало бы написать: ехр.close();.


Дата добавления: 2015-07-26; просмотров: 64 | Нарушение авторских прав


Читайте в этой же книге: Работа с классом fstream | Работа с классом ifstream | Работа с бинарным файлом | Примечание |
<== предыдущая страница | следующая страница ==>
Функции стандартного ввода/вывода| Пространства имен

mybiblioteka.su - 2015-2024 год. (0.01 сек.)