Yes, always use a std::string and getline.
Eg.
Code:
string line;
getline(cin,line);
When you have a line, then you can parse it however you want.
Eg.
Code:
istringstream i(line);
int Number;
i >> Number;
If you mix and match methods from C and C++, you will come unstuck at some point.
If you mix input methods in either language (fgets + scanf in C, or >> and getline in C++), you will come unstuck at some point (as well).
Stick to ONE general purpose approach to reading the input, then perform all the necessary conversion and validation as separate steps. cin >> var; might be nice and convenient as a one-off, but it can be a trap if you get a decent dialog going with the user.