The printf and scanf family functions have two major problems: type safety and memory safety. It's fairly easy to make a mismatch between the specification string and the variable length argument list that follows. Also, buffer overruns through scanf are a classic security vulnerability. In short, don't use them.
The C++ streams offer type and memory safety, and also formatting extensibility. They're much more powerful and generally easier to use than printf and scanf.
Also, as suggested by ShaderOp, Boost's format library provides the same safety, but makes the old C programmers feel more comfortable.