С++ для начинающих



Дополнительные операторы ввода/вывода - часть 6


Вот еще три необходимые нам функции-члена класса istream:

// возвращает символ в поток

putback( char class );

// устанавливает "указатель на следующий символ потока istream на один символ назад

unget();

// возвращает следующий символ (или EOF),

// но не извлекает его из потока

peek();

Следующий фрагмент иллюстрирует использование некоторых из них:

char ch, next, lookahead;

while ( cin.get( ch ))

{

   switch (ch) {

   case '/':

      // это комментарий? посмотрим с помощью peek()

      // если да, пропустить остаток строки

      next = cin.peek();

      if ( next == '/' )

         cin.ignore( lineSize, '\n' );

      break;

   case '>':

      // проверка на лексему >>=

      next = cin.peek();

      if ( next == '>' ) {

         lookahead = cin.get();

         next = cin.peek();

         if ( next != '=' )

            cin.putback( lookahead );

         }

         // ...

}

Упражнение 20.4

Прочитайте из стандартного ввода следующую последовательность символов, включая все пустые, и скопируйте каждый символ на стандартный вывод (эхо-копирование):

a  b c

d     e

f

Упражнение 20.5

Прочитайте фразу “riverrun, from bend of bay to swerve of shore” сначала как последовательность из девяти строк, а затем как одну строку.

Упражнение 20.6

С помощью функций getline() и gcount() прочитайте последовательность строк из стандартного ввода и найдите самую длинную (не забудьте, что строку, прочитанную за несколько обращений к getline(), нужно считать одной).




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