Самой большой проблемой при использовании printf и scanf является несоответствие спецификатора формата и типа аргумента, а для scanf также пропущенная операция ``&``.
С помощью перегрузки операций в C++ избавляются от формата, но в результате либо теряются некоторые возможности (пропуск вспомогательных символов, ввод заданного количества символов), либо их реализация является более сложной (ввод/вывод шестнадцатеричных чисел, выравнивание в поле заданной ширины).
Необходимые для ввода-вывода в С++ объекты и операции объявлены в следующих заголовочных файлах:
* ``<iostream>`` - потоки ввода вывода и операции
* ``<iomanip>`` - манипуляторы для форматированного ввода-вывода
* ``<format>`` - форматирование
Для упрощения использования стандартной библиотеки С++ (STL) рекомендуется написать\
``using namespace std;``\
иначе перед каждым именем из STL нужно писать префикс ``std::`` (``std::cout``, ``std::noskipws``).
```run-cpp
#include <iostream>
using namespace std;
int main()
{ double a,b;
// ввод и вывод пары чисел
cin>>a>>b; // scanf("%lg%lg",&a,&b);
cout<<a<<" "<<b<<"\n"; // printf("%lg %lg\n",a,b);
int d,m,y;
char c;
// ввод и вывод даты в формате d/m/y
cin>>d>>c>>m>>c>>y; // scanf("%d/%d/%d",&d,&m,&y);
cout<<d<<"/"<<m<<"/"<<y<<"\n"; // printf("%d/%d/%d\n",d,m,y);
}
<<
10.5 1.5
12/3/2021
```