|
Программирование >> Процедурные приложения
osout << client .pszphone; Тогда для вывода содержимого структуры client на экран достаточно будет задать такое выражение: cout << client; Эффективность этих операторов объясняется компактностью поддерживающего их программного кода. При обращении к функциям типа printf() и scanf() задействуется большой объем кода, основная часть которого не используется при выполнении конкретной операции ввода или вывода данных. Даже если в языке С вы оперируете только целыми числами, все равно будет подгружаться весь код функции с блоками обработки данных самых разных типов. Напротив, в языке C++ реально подгружаться будут только те подпрограммы, которые необходимы для решения конкретной задачи. В следующей программе оператор >> применяется для чтения данных различных типов: insert. срр Эта программа на языке C++ демонстрирует применение оператора >> для ввода данных типа char, int и double, а также строк. #include <iostream.h> #define INUMCHARS. 45 #define INULL CHAR 1 void main(void) { char canswer; int ivalue; double dvalue; char рзгпагае[INUMCHARS + INULL CHAR]; pout<< Эта программа позволяет вводить данные различных типов.\п ; cout<< Хотите попробовать? (Y- да, N - нет) ; cin >> canswer; if (canswer == У){ cout << \n << Введите целое число: ; cin >> ivalue; cout<< \n\nВведите число с плавающей запятой: ; cin >> dvalue; cout<< \n\nВведите ваше имя: ; cin >> pszname; cout \n\n ; } } В данном примере оператор << используется в простейшем виде - для вывода текста приглашений. Обратите внимание, что оператор >> выглядит во всех случаях одинаково, если не считать имен переменных. Теперь приведем пример программы, в которой оператор << применяется для вывода данных различных типов: I/ extract. срр Эта программа на языке C++ демонстрирует применение оператора << для вывода данных типа int, float, а также строк. #include <iostream.h> void main (void) char description!] = Магнитофон ; int quantity = 40; float price = 45.67; cout<< Наименование товара: << description endl; cout<< Количество на складе: << quantity endl; cout<< Цена в долларах: << price<< endl; Программа выведет на экран следующую информацию: Наименование товара: Магнитофон Количество на складе: 40 Цена в долларах: 45.67 Здесь следует обратить внимание на манипулятор endl. Манипуляторами называются специальные функции, которые в выражениях с потоковыми объектами, такими как coutи cin, записываются подобно обычным переменным, но в действительности выполняют определенные действия над потоком. Манипулятор endlшироко применяется при выводе данных в интерактивных программах, так как помимо записи символа новой строки он очищает буфер потока, вызывая выталкивание содержащихся в нем данных. Эту же операцию, но без вывода символа \n, можно выполнить с помощью манипулятора flush. Рассмотрим некоторые особенности ввода-вывода строк: string. срр Эта программа на языке C++ иллюстрирует особенности работы оператора >> со строками. #include <iostream.h> #define INUMCHARS 45 #define INULL CHARACTER 1 void main (void) { char ps zname[ INUMCHARS + INULL CHARACTER] ; cout<< Введите ваше имя и фамилию: ; cin >> pszname; cout << \n\nСпасибо, << pszname; В результате выполнения программы будет выведена следующая информация: Введите ваши имя и фамилию: Александр Иванов Спасибо, Александр Почему не была выведена вся строка? Это связано с особенностью оператора >>: он прекращает чтение строки, как только встречает первый пробел, знак табуляции или символ новой строки (кроме ведущих). Поэтому в переменной pszname сохранилось только имя, но не фамилия. Чтобы решить эту проблему, следует воспользоваться функцией cin.get (), как показано ниже: cinget.cpp Эта программа на языке C++ демонстрирует применение оператора >> совместно с функцией get() для ввода строк с пробелами. #include <iostream.h> #define.INUMCHARS 45 . j#define INULL CHARACTER 1 void main(void) char pszname[INUMCHARS + INULL CHARACTER]; cout<< Введите ваше имя и фамилию: ; cin.get(pszname, INUMCHARS); cout << \n\nСпасибо, << pszname; Теперь программа отобразит данные следующим образом: Введите ваше имя и фамилию: Александр Иванов Спасибо, Александр Иванов Функция cin .get (), помимо имени переменной, принимающей данные, ожидает два дополнительных аргумента: максимальное число вводимых символов и символ, служащий признаком конца ввода. В качестве последнего по умолчанию используется символ \n. Функция cin.get() считывает все символы в строке, включая пробелы и знаки табуляции, пока не будет прочитано указанное число символов или не встретится символ-ограничитель. Если в качестве ограничителя необходимо, к примеру, использовать знак *, следует записать такое выражение: cin.get(pszname, INUMCHARS, Флаги и функции форматирования Работа всех потоковых объектов из библиотеки IOSTREAM.H контролируется флагами форматирования, определяющими такие параметры, как, например, основание системы счисления при выводе целых чисел и точность представления чисел с плавающей запятой. Флаги можно устанавливать с помощью функции setf(), а сбрасывать - с помощью функции unsetf (). Есть два варианта функции setf() с одним аргументом типа long и с двумя. Первым аргументом является набор флагов, объединенных с помощью операции побитового ИЛИ (). Возможные флаги перечислены в таблице 11.1.
Вторым аргументом является специальная битовая маска, определяющая, какую группу флагов можно модифицировать. Имеются три стандартные маски: adjustfield = internal left right basefield = dec oct hex floatfield = fixed scientific Оба варианта функции setf() возвращают значение типа long, содержащее предыдущие установки всех флагов. Все перечисленные флаги, а также константы битовых масок и упоминавшиеся манипуляторы dec, hexи octявляются членами класса ios - базового в иерархии всех классов ввода-вывода. В этот класс входят, помимо прочего, функции fill() , precision ( ) и width ( ) , тоже связанные с форматированием выводимых данных! Функция fill( ) устанавливает переданный ей символ в качестве символа-заполнителя. Аналогичные действия выполняет манипулятор setfill () . Вызванная без аргументов, функция возвращает текущий символ-заполнитель. По умолчанию таковым служит пробел.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |