Поточный ввод-вывод в C++ выполняется с помощью функций сторонних библиотек. В С++, как и в С, нет встроенных в язык средств ввода-вывода.
В С для этих целей используется библиотека stdio.h. В С++ разработана новая библиотека ввода-вывода iostream, использующая концепцию объектно-ориентированного программирования:
#include <iostream>Библиотека iostream определяет три стандартных потока:
- cin стандартный входной поток (stdin в С)
- cout стандартный выходной поток (stdout в С)
- cerr стандартный поток вывода сообщений об ошибках (stderr в С)
Для их использования в Microsoft Visual Studio необходимо прописать строку:
В противном случае каждый вызов функций cin, cout будет дополняться пространством имен std и оператором разрешения контекста ::
std::cin >> Имя;
std::cout << Имя;Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:
- >> получить из входного потока
- << поместить в выходной поток
Вывод информации
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 вводит строку до пробела, символа табуляции или перевода строки.
Пример
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main()
{
char s[80];
cin >> s;
cout << s << endl;
system("pause");
return 0;
}Результат выполнения
Для ввода текста до символа перевода строки используется манипулятор потока getline():
2
3
4
5
6
7
8
9
10
#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++
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Введите n:";
cin >> n;
cout << "Значение n равно: " << n << endl;
cin.get(); cin.get();
return 0;
}Та же программа, написанная на языке Си
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
int n;
printf("Введите n:");
scanf("%d", &n);
printf("Значение n равно: %d\n", n);
getchar(); getchar();
return 0;
}Пример Использование форматированного вывода
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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;
}Результат выполнения
Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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;
}Результат выполнения
