Смекни!
smekni.com

Средства ввода-вывода в Си++ (стр. 3 из 3)


Форматный ввод из входного потока.

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

int scanf(const char * format, …);

При обращении к функции scanf() возможны две формы задания первого параметра:

int scanf ( форматная строка, список аргументов );

int scanf(указатель_на_форматную _строку, список_аргументов);

Функция scanf() читает последовательности кодов символов (байты) из входного потока и интерпретирует их в соответствии с форматной_строкой как целые числа, вещественные числа, одиночные символы, строки. В первом варианте вызова функции форматная строка размещается непосредственно в списке фактических параметров. Во втором варианте вызова предполагается, что первый фактический параметр - это указатель типа char *, адресующий собственно форматную строку. Форматная строка в этом случае должна быть определена в программе как обычная строковая константа или переменная.

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

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

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

Функция scanf() завершает работу, если исчерпана форматная строка. При успешном завершении scanf() возвращает количество преобразованных и введенных полей (точнее, количество объектов, получивших значения при вводе). Значение EOF возвращается при возникновении ситуации "конец файла"; значение -1 - при возникновении ошибки преобразования данных.

Рассмотрим форматную строку функции scanf(): "code: %d %*s %c %s"

Строка "code:" присутствует во входном потоке для контроля вводимых данных и поэтому указана в форматной строке. Спецификации преобразования задают следующие действия:

%d - ввод десятичного целого;

%*s - пропуск строки;

%с - ввод одиночного символа;

%s - ввод строки.

Приведем результаты работы программы для трех различных наборов входных данных.

1.Последовательность символов исходных данных:

code: 5 поле2 D asd

Результат выполнения программы:

i=5 c=D s=asd ret=3

Значением переменной ret является код возврата функц»-scanf(). Число 3 говорит о том, что функция scanf() ввела данные без ошибки и было обработано 3 входных поля (строки "code:" и "поле2" пропускаются при вводе).


Заключение.

В данной работе были рассмотрены особенности операций ввода-вывода в языке програмирования Си/С++, в которых есть много общего. Рассмотрены понятия «функции» и «потока», их виды и особенности функционирования в языке программирования.

Боллее глубоко и подробно были рассмотрены потоковый ввод-вывод символов, его особенности работы. В работе для иллюстрации приведены фрагменты программ с кодом, которые показывают особенности реализации тех или иных функций ввода-вывода.


Литература

1. Подбельский В.В. Программирование на языке С. М.: Финансы и статистика, 1999.

2. В.В.Подбельский, С.С.Фомин «Язык Си++». – М.: Финансы и статистика, 2003.

3. Павловская Т.А., Щупак Ю.А. С/С++. Структур-ное программирование (практикум). – Спб.: Пи-тер, 2004.

4. Аляев Ю.А., Козлов О.А. Программирование. Pascal, C++, Visual Basic. М.: Финансы и стати-стика, 2004.

5. Гуденко Д., Петроченко Д. Сборник задач по программированию. – Спб.: Питер, 2003.

6. Культин Н. С/С++ в задачах и примерах.. БХВ – Петербург, 2004.

7. Фридман А., Кландер Л. И др. С/С++. Алгоритмы и примеры. М. Бином, 2003.