Yes, always use a std::string and getline.
When you have a line, then you can parse it however you want.
If you mix and match methods from C and C++, you will come unstuck at some point.
i >> Number;
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.