ページ 11

scanf関数について

Posted: 2011年12月25日(日) 00:38
by nil
現在作成中のプログラムについてなのですが、
半角アルファベットの小文字をscanf関数を使って入力し、
入力された文字列が上の条件に当てはまらない場合(数字、大文字などが使用されたとき)

入力 → エラーなら一度"error"と表示し、再度入力

という処理を実装したく、
下記のようなコードを作成しました。

コード:

#include <stdio.h>
int main(){
	char Input[16];
	while(1){
		if(scanf("%[a-z]", Input) != 1){
			printf("error\n");
		}else{
			break;
		}
	}
}
ですが、このコードを実行した場合、
数字や大文字を入力した際に

コード:

error
error
error
............
というように延々とエラーメッセージが表示され続けます。
何故無限ループ(?)が起こってしまうのでしょうか?
また、どのように回避したらいいのでしょうか?

ご教示お願いします。

Re: scanf関数について

Posted: 2011年12月25日(日) 01:10
by パコネコ
その使い方を私は知らなかったのでさっき調べた程度の知識しかありませんが、おそらく、入力ストリームに保持され続けているのではないのかと思います。
ここにちょうどいいのが乗っていたので参考になるのではないかと思います。
http://wisdom.sakura.ne.jp/programming/c/c58.html

Re: scanf関数について

Posted: 2011年12月26日(月) 20:50
by nil
ご回答ありがとうございました。

どうにか自分で調べてみようと思います。