Потоковый ввод

Потоковый ввод использует переопределенную операцию сдвига вправо, >>, и называется операцией извлечения, или извлечением. Левый операнд операции >> представляет собой объект типа класса istream. Как и для вывода, правый операнд может быть любого типа, для которого определен вывод потоком.

Пример:

scanf(“%d%f%c”,&i,&f,&c);

заменяется на

cin>>i>>f>>c;

Нет необходимости при вводе данных ставить перед именами переменных оператор взятия адреса &,т.к. в С++ оператор >> вычисляет адрес, определяет формат и прочие особенности записи значения переменной.

Рассмотрим еще один пример:

int i; double d; cin >> i >> d;

Последняя строка вызывает пропуск пробельных символов. Цифры, считываемые со стандартного устройства ввода (по умолчанию это клавиатура), преобразуются затем во внутренний двоичный формат и записываются в переменную i. Затем снова пропускаются пробельные символы, и наконец считывается число с плавающей точкой, которое преобразуется и записывается в переменную d.

Для типа char* (рассматриваемого как строка) действие операции >> состоит в пропуске пробельных символов и записи следующих (не пробельных) символов до тех пор, пока не встретится следующий пробельный символ. Затем добавляется завершающий нулевой (0) символ.

Для типа char (signed или unsigned) действие операции >> состоит в пропуске пробельных символов и записи следующего (не пробельного) символа.

Перегрузка оператора >>

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

struct info{char name; int val; float units;}

istream& operator >> (istream& s, info& m);

{

s >> m.name >> m.val >> m.units;

return s;

}

В реальных прикладных программах, разумеется, вы можете добавить коды для проверки ошибок ввода. Для считывания строки ввода, такой как "capacity 1.25 liters", можно использовать следующую запись:

cin >> m;

Пример:

struct tclient {char pszname[25]; char pszaddress[30];int pszphone;}

istream& operator >> (istream& isin, tclient client)

{ isin>>client.pszname;

isin>>client.pszaddress;

isin>>client.pszphone;

}

Форматирование потокового ввода-вывода

Существует три способа управления форматом выходных данных: использование флагов, вызов форматирующих функций-элементов, применение манипуляторов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: