Previous: 効率のよいプログラム開発
Up: 入力の読み込みと制御構造
Previous Page: 効率のよいプログラム開発
Next Page: 制御構造と論理演算
書式 scanf("%d", &整数変数)
例 int a; scanf("%d", &a);例では、整数変数 a に標準入力から一個の整数を読み込む。
int a; if (scanf("%d",&a)==0){ printf("Error!\n"); }else{ printf("正常入力\n"); }
int a; printf("a = "); for (; scanf("%d", &a)==0 ;){ printf("入力エラー 再入力してください。\n a = "); }入力貯蔵庫から取り出して、エラーの場合はそれを返却するので、 入力貯蔵庫との間でキャッチボールを永遠に続けるのである。
この問題を解消するには、エラーの場合は、入力貯蔵庫を空にすれば良い。 そのための関数は、fflush() である。fflush の引数には、今の場合、 標準入力を指定するので、fflush(stdin) とする。従って、先の例は、
int a; printf("a = "); for (; scanf("%d", &a)==0 ;){ fflush(stdin); printf("入力エラー 再入力してください。\n a = "); }とすれば、無限ループを解消できる。
$ cc -o 実行ファイル名 ソースファイル名 例 $ cc -o test test.c