文字入力について

fgets関数

標準入力からの文字入力といえばscanf関数ですが、セキュリティの問題上、scanfではなくfgetsを利用することをすすめます。

#include <stdio.h>  //必要であれば追記
#include <string.h>
char name[21];
printf("名前を入力して下さい\t");
fgets(name, sizeof(name), stdin);
//改行コードを終端コードに置き換える
name[strlen(name) - 1] = '\0';
printf("\nあなたの名前は %s です。\n", name);

注意点

  • 改行コード(\n)に会うと、改行コードに続いてヌル文字を追加する仕様になっている → キーボードからの入力では改行コードが含まれるため削除する(ヌル文字に置き換える)必要がある
  • 入力は文字列として受け取る → 文字列から数値へ変換する必要がある

なぜscanfを使ってはいけないか?

  • 配列のサイズを超えた入力の抑制ができない
  • 改行以外に、スペースも区切り文字になってしまう
  • gets関数も同様の問題を持つ

fflush関数

scanf()では、最後の改行文字がバッファの中に残って、想定しないような動作になるときがあります。そこで、おまじないとしてfflush関数を一つ入れることをオススメします。

関連リンク