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