Читаем Освой самостоятельно С++ за 21 день. полностью

Цикл while в теле функции main программы прокручивается до тех пор, пока не будет возвращен символ конца файла (вводится комбинацией клавиш в Windows или и в MS DOS и UNIX соответственно). (Не забывайте, что функция cin.get возвращает 0 в конце файла.) Если текущий символ оказывается восклицательным знаком, он отбрасывается, а в поток ввода функцией putback возвращается символ $. Если же текущий символ не является восклицательным знаком, он выводится на экран. Если текущий символ оказывается #, то он пропускается функцией ignore.

Указанный подход далеко не самый эффективный способ решения подобных задач (более того, если символ # будет расположен в начале строки, то программа его пропустит). Но наша основная цель состояла в том, чтобы продемонстрировать работу функций putback и ignore. Впрочем, их использование достаточно просто и понятно.

Примечание:Методы peek и putback обычно используются для синтаксического анализа строк. Необходимость в нем возникает, например, при создании компилятора.

<p>Ввод данных с помощью cout</p>

Ранее вы уже использовали объект cout вместе с перегруженным оператором вывода (<<) для выведения на экран строк, чисел и других данных. Этот объект позволяет также форматировать данные, выравнивать столбцы и выводить числовые значения в десятичном и шестнадцатеричном формате. Как это сделать, вы узнаете далее.

<p>Очистка буфера вывода</p>

Вы, вероятно, уже заметили, что использование endl приводит к очистке буфера вывода. Этот оператор вызывает функцию-член flush объекта cout, которая и осуществляет очистку буфера. Вы можете напрямую вызывать метод flush, либо вызвав функцию-член flush, либо написав следующее выражение:

cout << flush

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

<p>Функции-члены объекта cout</p>

Аналогично тому, как мы обращались к методам объекта cin: get и getline, с объектом cout можно использовать функции put и write.

Функция put выводит один символ на стандартное устройство вывода. Так как эта функция возвращает ссылку на ostream, а cout является объектом ostream, есть возможность последовательного обращения к функции put для вывода ряда значений, как и при вводе данных. Реализация этой возможности показана в листинге 16.10.

Листинг 16.10. Использование функции put

1: // Листинг 16.10. Использование put

2: #include

3:

4: int main

5: {

6:    cout.put('H' ).put('e' ).put('l').put('l').put('o').put('\n');

7:    return 0;

8: }

Результат:

Hello

Примечание:При запуске этой программы некоторые компиляторы не выведут заданное слово Hello. Если эта проблема коснется и вас, просто пропустите этот листинг и идите дальше.

Анализ: Строку 6 можно представить следующим образом: функция cout.put('H') выводит букву H на экран и возвращает объект cout. Оставшуюся часть выражения можно представить следующим образом:

cout.put('e').put('l').put('l').put('o').put('\n');

Выводится буква e, после чего остается cout.put('l'). Таким образом, повторяется цикл, на каждом этапе которого выводится следующая бука и возвращается объект cout. После вывода последнего символа ('\n') выполнение функции завершается.

Функция write работает так же, как и оператор ввода (<<), но она принимает параметр, указывающий максимальное количество выводимых символов. Использование этой функции показано в листинге 16.11.

Листинг 16.11. Использование функции write

1: // Листинг 16.11. Использование write

2: #include

3: #include

4:

5: int main

6: {

7:    char One[] = "One if by land";

8:

9:

10:

11:   int fullLength = strlen(One)

12:   int tooShort = fullLength -4;

13:   int tooLong = fullLength +6;

14:

15:   cout.write(One,fullLength) << "\n";

16:   cout.write(One,tooShort) << "\n";

17:   cout.write(One,tooLong) << "\n";

18:   return 0;

19: }

Результат:

One if by land

One if by

One if by land i?!

Примечание:На вашем компьютере последняя строка вывода может выглядеть иначе.

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT