    Предположим, эти операторы не дают ожидаемого вывода на дисплей, и вы 
приняли решение проверить, что случится, если вы удалите оператор cout « 
'\n';, который переводит строку перед отображением буфера. Вместо того чтобы 
удалить строку, вы можете добиться нужного эффекта, превратив ее в комментарий: 

    char buffer[128];	// Буфер для ввода 
    gets(buffer);           // Записать строку в буфер 
    /• 
    cout « '\n';	// Начать новую строку для отображения 
    •/ 
    cout « buffer «  '\n';	// Вывести буфер и перейти на новую строку 

    Скобки /* и */ "комментируют" заключенный в них оператор. Компилятор 
игнорирует все символы между скобками комментария, включая и комментарий на 
C++ // Начать новую строку для отображения. Теперь вы можете перекомпилировать 
и запустить временно измененную программу. Если вы решили восстановить 
первоначальный оператор, необходимо лишь удалить скобки комментария ANSI С. 

    Введение в потоки ввода-вывода 

    Несколько примеров программ демонстрируют мощь библиотеки потоков 
ввода-вывода в C++ (см. главу 15). Как и в ANSI С ввод и вывод в C++ не 
являются частью языка, а обеспечиваются внешними библиотечными модулями. Это 
означает, что программисты, пишущие программы для встроенных систем или для 
компьютеров, предназначенных для особых целей, вольны придумывать свои функции 
и способы ввода-вывода — это одна из причин популярности С и C++ в задачах 
программирования низкого уровня. Большинство программистов, конечно, могут 
воспользоваться стандартными библиотеками, разработанными специалистами 
высокого класса в области программного обеспечения, которых нелегко превзойти. 
    Поведение объекта потока ввода-вывода очень похоже на стандартный 
ввод-вывод потоков файлов, введенный в части II и подробно описанный в главе 
11. Потоки cout (character out) и cin (character in) имеют множество 
разнообразных возможностей. Чтобы отобразить символ с, вы можете написать 

    cout « с; 

или 

    cout.put(c); 

    Функция put() — член cout, это новое понятие, с которым вы будете часто 
встречаться в следующих разделах. Для вызова функции-члена, отделите его 
точкой от cout, как в записи, используемой для доступа к члену структуры. 
Поток cout — пример класса, который может иметь относящиеся к нему функции, 
такие, как put(). (В следующей главе эта возможность будет рассмотрена 
подробнее.) Вы должны вызывать функцию-член только со ссылкой на объект, 
подобный cout. Без этого выражение 

    put(c);  // ??? 

попытается вызвать независимую функцию put(). Оператор 

    cout.put(с); 

вызовет функцию putO, которая принадлежит cout. 
    Для того чтобы прочитать символ из стандартного ввода, следует 
использовать поток ввода cin, стоящий перед оператором » (взять из). Оператор 
    cin » с; 

читает один символ из стандартного ввода и присваивает его переменной с. 
    Вы также можете вызвать функцию-член get из cin, сделав это следующим образом: 

    cin.get(c); 

    Как и в стандартном вводе-выводе, библиотека потоков использует системные 
стандартные файлы ввода и вывода и может использоваться для написания 
программ-фильтров. Листинг 12.3 демонстрирует простую программу фильтра. 
Поскольку Windows не поддерживает понятие фильтра, скомпилируйте FILTER. CPP 
из среды DOS, введя команду bcc filter. 

    Листинг 12.3.  FILTER.CPP (простая программа-фильтр на C++) 

    1:	#include <iostream.h> 
    2: 
    3:	main() 
    4:	{ 
    5:	  char с; 
    6: 
    7:	  while (cin.get(c)) 
    8:	     cout.put(c); 
    9:	  return 0; 
    10:	} 


    282	Часть III. Программирование на ANSI C++ 
