まずはそれぞれの関数の仕様を正確に把握しましょう。 それを怠っていると、実際以上に物事が複雑に見えてしまい、難度を上げてしまいます。 どの関数を使うかの基準ですが... ちょっとした実験プログラムや使い捨てのツールなどであれば、使いやすい関数を使うのが一番楽です。 このような場合は、文字列の読み込みはgets、数値入力ならscanfというように、入力部分は楽をして、本質的な部分に注力する方が得策です。 ある程度以上信頼性が求められる状況であれば、機能面だけではなく、エラー処理のことも考えて使う関数を選ばなければなりません。 たとえば、scanfやfscanfは、文字列を読み込むのであれば、(たとえ空白文字を含む文字列の入力であっても)特に問題なく使うことができます。ただし、入力された文字列に対してバッファサイズが不足していた場合は、読み込めなかった残りの文字をどうするか、十分注意しなければ