入力バッファクリア方法
先日、scanf卒業 - Shammerismで例示した実装、
int number,i,j; char str[3]; printf("Type the number:"); fgets(str, sizeof(str),stdin); number = atoi(str); printf("Number:%d\n", number);
で、fgetsを連続して行うように修正し、さらに最初のfgetsで3文字以上タイプすると、2回目のfgetsは実行されない。これがバッファをクリアしていないと発生する問題なんだな、きっと。当然、そうなると意図した動作ではなくなってしまうので、バッファをクリアする必要がある。いろいろと方法はあるのだろうけれども、以下のようにしてみました。
char ignore; fgets(str, sizeof(str), stdin); if( strchr(str, '\n') != NULL ){/* 改行を含む、つまり、入力文字がバッファに収まった場合 */ str[strlen(str) - 1] = '\0';/* 改行をNULLに変換 */ } else { do { ignore = getchar(); } while ( ignore != '\n' ); }
こうしておけば、入力バッファの内容をクリアできたように見える。
うーん・・・でも正しいのかどうかはよくわからない。