Язык программирования C++ для профессионалов



         

Ввод встроенных типов


Класс istream определяется следующим образом:

class istream : public virtual ios { //... public: istream& operator>>(char*); // строка istream& operator>>(char&); // символ istream& operator>>(short&); istream& operator>>(int&); istream& operator>>(long&); istream& operator>>(float&); istream& operator>>(double&); //... };

Функции ввода operator>> определяются так:

istream& istream::operator>>(T& tvar) { // пропускаем обобщенные пробелы // каким-то образом читаем T в`tvar' return *this; }

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

int readints(Vector<int>& v) // возвращаем число прочитанных целых { for (int i = 0; i<v.size(); i++) { if (cin>>v[i]) continue; return i; } // слишком много целых для размера Vector // нужна соответствующая обработка ошибки }

Появление значения с типом, отличным от int, приводит к прекращению операции ввода, и цикл ввода завершается. Так, если мы вводим

1 2 3 4 5. 6 7 8.

то функция readints() прочитает пять целых чисел

1 2 3 4 5

Символ точка останется первым символом, подлежащим вводу. Под пробелом, как определено в стандарте С, понимается обобщенный пробел, т.е. пробел, табуляция, конец строки, перевод строки или возврат каретки. Проверка на обобщенный пробел возможна с помощью функции isspace() из файла <ctype.h>.

В качестве альтернативы можно использовать функции get():

class istream : public virtual ios { //... istream& get(char& c); // символ istream& get(char* p, int n, char ='n'); // строка };

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

Функция istream::get(char&) вводит один символ в свой параметр. Поэтому программу посимвольного копирования можно написать так:

main() { char c; while (cin.get(c)) cout << c; }




Содержание  Назад  Вперед