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 читается несколько легче, чем \п, хотя функции того и другого одинаковы.