Цикл while в теле функции main программы прокручивается до тех пор, пока не будет возвращен символ конца файла (вводится комбинацией клавиш
Указанный подход далеко не самый эффективный способ решения подобных задач (более того, если символ # будет расположен в начале строки, то программа его пропустит). Но наша основная цель состояла в том, чтобы продемонстрировать работу функций putback и ignore. Впрочем, их использование достаточно просто и понятно.
Примечание:
Ввод данных с помощью cout
Ранее вы уже использовали объект cout вместе с перегруженным оператором вывода (<<) для выведения на экран строк, чисел и других данных. Этот объект позволяет также форматировать данные, выравнивать столбцы и выводить числовые значения в десятичном и шестнадцатеричном формате. Как это сделать, вы узнаете далее.
Очистка буфера вывода
Вы, вероятно, уже заметили, что использование endl приводит к очистке буфера вывода. Этот оператор вызывает функцию-член flush объекта cout, которая и осуществляет очистку буфера. Вы можете напрямую вызывать метод flush, либо вызвав функцию-член flush, либо написав следующее выражение:
cout << flush
Указанный метод позволяет явно очистить буфер вывода на тот случай, если не вся информация из него была выведена на экран.
Функции-члены объекта cout
Аналогично тому, как мы обращались к методам объекта 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
Примечание:
Анализ: Строку 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?!
Примечание: