文字入力について

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関数を一つ入れることをオススメします。

関連リンク


Comments