В чём основное отличие этих способов ввода/вывода? Можно ли в C++ использовать спокойно функции scanf/printf или есть какие-то подводные камни?
scanf и printf это наследие C, они входят в стандартную библиотеку C, которая полностью поддерживается С++ (хотя сейчас эти языки расходятся). Потоки (cin и cout) это стандартная (и более новая) библиотека C++. Можно использовать любую библиотеку, или даже обе сразу. Однако как замечено в комментариях, для доступа к одному и тому же стандартному потоку (stdin/stdout) лучше использовать что-то одно, иначе могут быть проблемы с синхронизацией.
Хотя функции ввода/вывода C более старые, они помощнее, да и поудобнее. Так что в маленьких (особенно учебных) программах чаще используются потоки, а в больших коммерческих чаще можно видеть функции C. Это по личному впечатлению, конечно, вряд ли тут есть достоверная статистика.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей