Программирование >>  Инициализация объектов класса, структура 

1 ... 341 342 343 [ 344 ] 345 346 347 ... 395


cin >> item number; if ( ! cin )

cerr << ошибка: введено некорректное значение item number!\n ;

Хотя сцепление операторов ввода поддерживается, проверить корректность каждой отдельной операции нельзя, поэтому пользоваться таким приемом следует лишь тогда,

#include <iostream> #include <string>

int main() {

int item number; string item name; double item price;

cout << Пожалуйста, введите item number, item name и price: << endl;

хорошо, но легче допустить ошибку cin >> item number >> item name >> item price;

cout << Введены значения: item# << item number << << item name << @$ << item price << endl;

когда ошибка невозможна. Наша программа теперь выглядит так:

Последовательность

d e

составлена из девяти символов: a, b, (пробел), c, \n (переход на новую строку), d, \t (табуляция), e и \n. Однако приведенная программа читает лишь

#include <iostream>

int main() {

char ch;

прочитать и вывести каждый символ while ( cin >> ch ) cout << ch; cout << endl;

пять букв:



#include <iostream>

int main() {

char ch;

читать все символы, в том числе пробельные cin.get( ch )) cout.put( ch );

while ( cin.get( ch

...

член put() класса ostream; они будут рассмотрены ниже). Например:

Другая возможность сделать это - использовать манипулятор noskipws.

Каждая из двух данных последовательностей считается составленной из пяти строк, разделенных пробелами, если для чтения используются операторы ввода с типами const char* или string:

A fine and private place A fine and private place

Наличие кавычек не делает пробелы внутри закавыченной строки ее частью. Просто открывающая кавычка становится начальным символом первого слова, а закрывающая -конечным символом последнего.

Вместо того чтобы читать из стандартного ввода по одному символу, можно воспользоваться потоковым итератором istream iterator:

И печатает следующее:

Pabcde

По умолчанию все пустые символы отбрасываются. Если нам нужны и они, например для сохранения формата входного текста или обработки пустых символов (скажем, для подсчета количества символов перехода на новую строку), то можно воспользоваться функцией-членом get() класса istream (обычно в паре с ней употребляется функция-



#include <algorithm>

#include <string>

#include <vector>

#include <iostream>

int main()

istream iterator< string > in( cin ), eos ; vector< string > text ;

копировать прочитанные из стандартного ввода значения в вектор text

copy( in , eos , back inserter( text ) ) ;

sort( text.begin() , text.end() ) ;

удалить дубликаты

vector< string >::iterator it;

it = unique( text.begin() , text.end() ) ;

text.erase( it , text.end() ) ;

вывести получившийся вектор int line cnt = 1 ;

for ( vector< string >::iterator iter = text.begin() ; iter != text.end() ; ++iter , ++line cnt ) cout << *iter

<< ( line cnt % 9 ? : \n ) ;

cout << endl;

Пусть входом для этой программе! будет файл istream iter.C с исходным текстом. В системе UNIX мы можем перенаправить стандартный ввод на файл следующим образом (istream iter - имя исполняемого файла программы):

istream iter < istream iter.C

(Для других систем необходимо изучить документацию.) В результате программа выводит:

!= \n #include % ( ) *iter ++iter

++line cnt , 1 9 : ; << <algorithm> <iostream.h>

<string> <vector> = > >::difference type >::iterator ? allocator back inserter(

cin copy( cout diff type eos for in in( int

istream iterator< it iter line cnt main() sort( string test test.begin() test.end() test.erase( typedef unique( vector< { }

(Потоковые итераторы ввода/вывода iostream рассматривались в разделе 12.4.)

Помимо предопределенных операторов ввода, можно определить и собственные перегруженные экземпляры для считывания в пользовательские типы данных. (Подробнее мы расскажем об этом в разделе 20.5.)



1 ... 341 342 343 [ 344 ] 345 346 347 ... 395

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