Программирование >>  Процедурные приложения 

1 ... 64 65 66 [ 67 ] 68 69 70 ... 150


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.

Таблица 11.1. Флаги форматирования

Флаг

Назначение

skipws

при вводе пробельные литеры пропускаются

выводимые данные выравниваются по левому краю с дополнением символами-заполнителями по ширине поля

-ight

выводимые данные выравниваются по правому краю с дополнением символами-заполнителями по ширине поля (установлен по умолчанию)

nternal

при выравнивании символы-заполнители вставляются межжду символом знака или префиксом основания системы счисления и числом

целые числа выводятся по основанию 10 (установлен по умолчанию); устанавливается также манипулятором dec

целые числа выводятся по основанию 8; устанавливается также манипулятором oct

целые числа выводятся по основанию 16; устанавливается также манипулятором hex

showbase

при выводе целых чисел отображается префикс, указывающий на основание системы счисления

showpoint

при выводе чисел с плавающей запятой всегда отображается десятичная точка, а хвостовые нули не отбрасываются

uppercase

шестнадцатеричные цифры от А до F, а также символ экспоненты Е отображаются в верхнем регистре

showpos

при выводе положительных чисел отображается знак плюс

scientific

числа с плавающей запятой отображаются в научном формате (с экспонентой)

fixed

числа с плавающей запятой отображаются в фиксированном формате (без экспоненты)

unitbuf

при каждой операции вывода буфер потока должен очищаться

stdio

при каждой операции вывода буферы потоков stdout и stderr должны очищаться

Вторым аргументом является специальная битовая маска, определяющая, какую группу флагов можно модифицировать. Имеются три стандартные маски:

adjustfield = internal left right basefield = dec oct hex floatfield = fixed scientific

Оба варианта функции setf() возвращают значение типа long, содержащее предыдущие установки всех флагов.

Все перечисленные флаги, а также константы битовых масок и упоминавшиеся манипуляторы dec, hexи octявляются членами класса ios - базового в иерархии всех классов ввода-вывода. В этот класс входят, помимо прочего, функции fill() , precision ( ) и width ( ) , тоже связанные с форматированием выводимых данных!

Функция fill( ) устанавливает переданный ей символ в качестве символа-заполнителя. Аналогичные действия выполняет манипулятор setfill () . Вызванная без аргументов, функция возвращает текущий символ-заполнитель. По умолчанию таковым служит пробел.



1 ... 64 65 66 [ 67 ] 68 69 70 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика