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



Состояние формата - часть 5


Когда мы пишем:

cout << "пожалуйста, введите значение: ";

то в буфере потока cout сохраняется литеральная строка. Есть ряд условий, при которых буфер сбрасывается (т.е. опустошается), – в нашем случае в стандартный вывод:

  • буфер может заполниться. Тогда перед чтением следующего значения его необходимо сбросить;
  • буфер можно сбросить явно с помощью любого из манипуляторов flush, ends или endl:
  • // сбрасывает буфер

    cout << "hi!" << flush;

    // вставляет нулевой символ, затем сбрасывает буфер

    char ch[2]; ch[0] = 'a'; ch[1] = 'b';

    cout << ch << ends;

    // вставляет символ новой строки, затем сбрасывает буфер

    cout << "hi!" << endl;

    • при установлении внутренней переменной состояния потока unitbuf буфер сбрасывается после каждой операции вывода;
    • объект ostream может быть связан (tied) с объектом istream. Тогда буфер ostream сбрасывается каждый раз, когда istream читает из входного потока. cout всегда связан с cin:
    • cin.tie( &cout );

      Инструкция

      cin >> ival;

      приводит к сбросу буфера cout.

      В любой момент времени объект ostream разрешено связывать только с одним объектом istream. Чтобы разорвать существующую связь, мы передаем функции-члену tie() значение 0:

      istream is;

      ostream new_os;

      // ...

      // tie() возвращает существующую связь

      ostream *old_tie = is.tie();

      is.tie( 0 );   // разорвать существующую связь

      is.tie( &new_os );  // установить новую связь

      // ...

      is.tie( 0 );   // разорвать существующую связь

      is.tie( old_tie );  // восстановить прежнюю связь

      Мы можем управлять шириной поля, отведенного для печати числового или строкового значения, с помощью манипулятора setw(). Например, программа

      #include <iostream>

      #include <iomanip>

      int main()

      {

                 int ival = 16;

                 double dval = 3.14159;

                

                 cout << "ival: " << setw(12) << ival << '\n'

                      << "dval: " << setw(12) << dval << '\n';




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