- ベストアンサー
数字以外が入力されたらエラー文を出したい。
scanfで数字を取り込みたいのですが、ここでaなどのアルファベットや記号を入力すると、無限ループが発生してしまいます。 エラーが出ないように、数字以外が入力されたら、エラーメッセージを出すようなプログラムを作りたいのですが、どうすれば出来るでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >scanfで数字を取り込みたいのですが、ここでaなどのアルファベットや記号を入力すると、 >無限ループが発生してしまいます。 ↑ ソースとかを見せて欲しいです。 見ないとなぜ無限ループするのか判断できません。 >エラーが出ないように、数字以外が入力されたら、エラーメッセージを出すようなプログラムを >作りたいのですが、どうすれば出来るでしょうか。 ↑ 多分、scanf で整数の入力を行っていると思うので文字列で入力するようにします。 そしてそのその文字列を strtod() 関数で整数に変換します。 ・このときグローバル変数の errno を調べて ERANGE なら整数値のオーバーフローが起きたとか、 第2引数で私のポインタに変換できなくなった位置をセットしますので、このポインタが \0 文字 以外なら数字以外(アルファベットや記号)が混ざっていることになります。 ・下にそのサンプルを載せます。 サンプル: char buff[ 256 ]; char *argp; int value; // 文字列で入力 scanf( "%s", buff ); value = strtol( buff, &argp, 10 ); ←10進数で変換 // ここでチェック if ( (errno != ERANGE) && (*argp != '\0') ){ printf( "変換不可能な文字が入力されています。\n" ); exit( 1 ); } その他: ・上記のサンプルを使うには errno.h をインクルードして下さい。 このヘッダに ERANGE 定数が定義されています。 あと stdlib.h もインクルードしないと strtol() 関数が利用できません。 ・以上。下の『参考URL』もどうぞ。
お礼
ありがとうございます!!助かりました!