Shammer's Philosophy

My private adversaria

scanf卒業

C言語の入門書ではほぼ間違いなく使われているけれども、実際の開発現場では間違いなく使われていないと予想されるscanf関数の使用を止めることにしました。標準入力から簡単に文字を読み込めるから勉強レベルでは便利なのだけれども・・・

どうも、連続でscanf関数を利用したり、空白文字を含むような場合に予期せぬ動作になることがあるようだ(詳細はよくわからない)。回避策も何パターンかあるようだが、とりあえず以下のようにしてみた。

    int number,i,j;
    char str[3];
    printf("Type the number:");
    fgets(str, sizeof(str),stdin);
    number = atoi(str);
    printf("Number:%d\n", number);

この例は、標準入力から数字を読み込む例。この例だと、3文字以上タイプしても読み込まれるのは最初の2文字まで。数字以外は0が読み込まれたとみなされる。読み込まれなかった1文字は無視されるように思われるが、入力バッファをクリアする処理を行っていないと問題が起きるのかもわからない。でも・・・方法がわからないのと、第一の目標(scanfを使用しない)はクリアできたのでとりあえずよしとするか。