Поточный ввод-вывод в 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;
}
Результат выполнения