Fgets
gets 関数は改行文字が入力されるまで標準入力を読み続けるため、入力終了後にストリーム上に文字が残る事は無い、しかし fgets に置き換えた場合最大文字数を超えた入力が行われた場合、n バイト以降は入力ストリームにそのまま残されてしまい、後から別の入力を行うときに誤作動を起こす可能性がある。
scanf では代入抑止を使用することで入力ストリームをクリアする方法がある(参照)が、fgets にはそのような機能は無いため別途入力ストリームをクリアする処理を追加する必要がある。
また fgets で最大文字数を超える入力があった場合には、戻り値はエラーを返しては来ないので、入力された文字列に改行文字が含まれるかどうかで判断する必要がある。