Поточный ввод-вывод в C++

Язык C++ / Поточный ввод-вывод в C++

В С++, как и в С, нет встроенных в язык средств ввода-вывода.

В С для этих целей используется библиотека stdio.h.
В С++ разработана новая библиотека ввода-вывода iostream, использующая концепцию объектно-ориентированного программирования:

#include <iostream>

Библиотека iostream определяет три стандартных потока:

  • cin  стандартный входной поток (stdin в С)
  • cout  стандартный выходной поток (stdout в С)
  • cerr  стандартный поток вывода сообщений об ошибках (stderr в С)

Для их использования в Microsoft Visual Studio необходимо прописать строку:

using namespace std;

Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:

  • >>  получить из входного потока
  • <<  поместить в выходной поток
Вывод информации
cout << значение;

Здесь значение преобразуется в последовательность символов и выводится в выходной поток:

cout << n;

Возможно многократное назначение потоков:
cout << 'значение1' << 'значение2' << ... << 'значение n';

int n;
char j;
cin >> n >> j;
cout << "Значение n равно" << n << "j=" << j;
Ввод информации
cin >> идентификатор;

При этом из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор:

int n;
cin >> n;

Возможно многократное назначение потоков:

cin >> переменная1 >> переменная2 >>...>> переменнаяn;

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

int n;
char j;
cin >> n >> j;

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

#include <iostream>
using namespace std;
int main() {
  char s[80];
  cin >> s;
  cout << s << endl;
  system("pause");
  return 0;
}
Результат выполнения
Ввод слова

Для ввода текста до символа перевода строки используется манипулятор потока getline():

#include <iostream>
using namespace std;
int main() {
  char s[80];
  cin.getline(s,80);
  cout << s << endl;
  system("pause");
  return 0;
}

Результат выполнения
Ввод текста

Манипуляторы потока

Функцию - манипулятор потока можно включать в операции помещения в поток и извлечения из потока (<<, >>).
В С++ имеется ряд манипуляторов. Рассмотрим основные:

Манипулятор Описание
endl Помещение в выходной поток символа конца строки '\n'
dec Установка основания 10-ой системы счисления
oct Установка основания 8-ой системы счисления
hex Установка основания 16-ой системы счисления
setbase Вывод базовой системы счисления
width(ширина) Устанавливает ширину поля вывода
fill('символ') Заполняет пустые знакоместа значением символа
precision(точность)
Устанавливает количество значащих цифр в числе (или после запятой) в зависимости от использования fixed
fixed Показывает, что установленная точность относится к количеству знаков после запятой
showpos Показывает знак + для положительных чисел
scientific Выводит число в экспоненциальной форме
get() Ожидает ввода символа
getline(указатель, количество) Ожидает ввода строки символов. Максимальное количество символов ограничено полем количество

Пример Программа ввода-вывода значения переменной в C++

#include <iostream>
using namespace std;
int main() {
  int n;
  cout << "Введите n:";
  cin >> n;
  cout << "Значение n равно: " << n << endl;
  cin.get(); cin.get();
  return 0;
}

Та же программа, написанная на языке Си

#include <stdio.h>
int main() {
  int n;
  printf("Введите n:");
  scanf("%d",&n);
  printf("Значение n равно: %d\n",n);
  getchar(); getchar();
  return 0;
}

Пример Использование форматированного вывода

#include <iostream>
using namespace std;
int main()
{
  double a = -112.234;
  double b = 4.3981;
  int c = 18;
  cout << endl << "double number:" << endl;
  cout <<"width(10)" << endl;
  cout.width(10);
  cout << a << endl << b << endl;
  cout <<"fill('0')" << endl;
  cout.fill('0');
  cout.width(10);
  cout << a << endl << b << endl;
  cout.precision(5);
  cout <<"precision(5)" << endl << a << endl << b << endl;
  cout << "fixed" << endl << fixed << a << endl << b << endl;
  cout << "showpos" << endl << showpos << a << endl << b << endl;
  cout << "scientific" <<endl << scientific << a << endl << b << endl;
  cout << endl << "int number:" << endl;
  cout << showbase << hex << c <<" " << showbase << oct << c << " ";
  cout << showbase << dec << c << endl;
  cin.get();
  return 0;
}

Результат выполнения
cout
Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).

#include <iostream>
using namespace std;
int main() {
  cout<<fixed;
  for (double t = 0; t <= 3; t += 0.5) {
    cout.width(3);
    cout.precision(1);
    cout << t;
    cout.width(8);
    cout.precision(3);
    cout << cos(t) << endl;
  }
  system("pause");
  return 0;
}

Результат выполнения
Форматированный вывод
Назад


Назад: Язык C++

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *