C++ iostreams have a lot of flaws, as noted in the other responses, but I'd like to note something in its defense.
C++ is virtually unique among languages in serious use that makes variable input and output straightforward for beginners. In other languages, user input tends to involve type coercion or string formatters, while C++ makes the compiler do all the work. The same is largely true for output, although C++ isn't as unique in this regard. Still, you can do formatted I/O pretty well in C++ without having to understand classes and object-oriented concepts, which is at pedagogically useful, and without having to understand format syntax. Again, if you're teaching beginners, that's a big plus.
This simplicity for beginners comes at a price, which can make it a headache for dealing with I/O in more complex situations, but hopefully by that point the programmer has learned enough to be able to deal with them, or at least turned old enough to drink.