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




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


Символы читаются из потока, пока одно из следующих условий не окажется истинным. Как только это случится, в очередную позицию массива помещается двоичный нуль.

  • прочитано size-1 символов;
  • встретился конец файла;
  • встретился символ-ограничитель (еще раз напомним, что он остается в потоке и будет считан следующим).
  • Эта форма get() возвращает объект istream, для которого была вызвана (функция-член gcount() позволяет узнать количество прочитанных символов). Вот простой пример ее применения:

    #include <iostream>

    int main()

    {

          const int max_line = 1024;

          char line[ max_line ];

          while ( cin.get( line, max_line ))

          {

                // читается не больше max_line - 1 символов,

                // чтобы оставить место для нуля

                int get_count = cin.gcount();

                cout << "фактически прочитано символов: "

                     << get_count << endl;

                // что-то сделать со строкой

                // если встретился символ новой строки,

                // удалить его, прежде чем приступать к чтению следующей

                if ( get_count < max_line-1 )

                  cin.ignore();

          }

    }

    Если на вход этой программы подать текст о юной Алисе Эмме, то результат будет выглядеть так:

    фактически прочитано символов: 52

    фактически прочитано символов: 60

    фактически прочитано символов: 66

    фактически прочитано символов: 63

    фактически прочитано символов: 61

    фактически прочитано символов: 43

    Чтобы еще раз протестировать поведение программы, мы создали строку, содержащую больше max_line символов, и поместили ее в начало текста. Получили:

    фактически прочитано символов: 1023

    фактически прочитано символов: 528

    фактически прочитано символов: 52

    фактически прочитано символов: 60

    фактически прочитано символов: 66

    фактически прочитано символов: 63

    фактически прочитано символов: 61

    фактически прочитано символов: 43

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




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