304______________________________Часть II. Программирование на C++
Очевидно, что чем разнообразнее синтаксис, тем сложнее становится реализация отдельных сторон языка и тем выше вероятность возникновения ошибок. Давайте разберемся в отличиях между функциями ввода-вывода в С и их альтернативами в C++.
Сравнение ввода-вывода в С и C++
Ввод-вывод в C++ не нуждается в адвокатах. На ваш суд будет представлено и старое, и новое, поскольку вам наверняка придется столкнуться и с тем и с другим. И если вы сделаете свой выбор в пользу библиотек потоковых классов, мы будем считать свою миссию выполненной.
Начнем с простого: рассмотрим примеры вывода на консоль и чтения с клавиатуры (попутно четко очерчивая границы между подходами, характерными для С и для C++).
Консольный ВВОД-ВЫВОД В С и C++. Консоль — это монитор и клавиатура. Вывод на монитор можно осуществлять функцией print f, объявленной в заголовочном файле stdio.h:
int printf( const char*, ...); //с переменным списком аргументов
Вместо многоточия подставляется список аргументов переменной длины;
аргументы считываются из стека в соответствии со строкой формата const char*, так что эта функция явно не может быть быстрой. Программируя вывод, вы фактически делаете изрядную часть работы вручную, помогая функции printf разобраться, что же ей надо напечатать:
// Это фрагмент, а не законченная программа!
#include <stdio.h>
char *doodleBug = "Pauly Wauly Doodle Bug";
printf( "%s\n", doodleBug);
// Напечатает "Pauly Wauly Doodle Bug" и перейдет на новую строку
Первая часть строки формата %з означает, что список аргументов состоит из строки ASCIIZ (т. е. завершающейся нулем), а знак \п символизирует перевод на новую строку. »
А вот так то же самое можно сделать на C++:
#include <iostream.h>
char *doodleBug = '"Pauly Wauly Doodle Bug";
cout « doodleBug « endl;
// Сделает точно то же самое
Мы ничего не выиграли в объеме, но — сравните синтаксис. Все, что вам пришлось сделать — это вставить нужный заголовок и применить к аргументу операцию «. Не нужно больше никакого форматирования, да и endl читается несколько легче, чем \п, хотя функции того и другого одинаковы.