いつもお世話になっております
また、自己解決できない問題が発生したためご教授願いたいと思い書き込みさせていた
だきました。
もし同じような質問があり、それが解決済みであればお手数ですが、貼り付けていただ
けたらうれしいです。
早速質問なのですが、
キーボードから入力された文字を判定するプログラムを作成したいと考えています。
if(判定)
{
整数の処理
}else{
整数以外の文字列の処理
}
これを基本にしたプログラムを何度かループさせるプログラムを組みたいのですが、
キーボードからの入力の時点で詰まってしまいました。
scanf では、うまく動きません。
ご存知の方、ご教授願います。
> scanf では、うまく動きません。
説明不足。
どんなコードで/どんな時に/どのように うまく動きませんか?
>説明不足。
>どんなコードで/どんな時に/どのように うまく動きませんか?
申し訳ありません
int text;
scanf(%d,text);
としたところ、誤って数値ではなく文字を入力したところその後の
scanfが全て無視されてしまいました。
scanfの戻り値に着いて調べてみてください。
もしくは、元から文字列で受け取ってチェックするとか。
>もしくは、元から文字列で受け取ってチェックするとか。
char a[256];
int text;
scanf(%s, &a);
iSum = atoi(&text);
としたところ、結果がこうなりました。
11111 ・・・・ ○
aaaaa ・・・・ ×
111aa ・・・・ ○ ←
aaa11 ・・・・ ×
矢印の場合もエラーにしたいのですが、一文字づつチェックしていくしかないのでしょ
うか??
訂正
>char a[256];
char a;
>訂正
%sを指定する場合最低でもchar型領域2つ分は必要です。
(1文字でもNULL文字が加わるため2文字分)
いまはたまたま動いているかもしれませんが、別の領域を壊してしまったりして
動かなくなります。
訂正するなら
>scanf(%s, &a);
>iSum = atoi(&text);
scanf(%s, a);
iSum = atoi(a);
でしょうね。
>参考
> http://forums.belution.com/ja/vc/000/327/15s.shtml
覗いてみたら同じような質問でした。
お手数をおかけしました。
int CheckNumber( const char* p )
{
while ( *p )
{
if ( !isdigit( *p++ ) )
{
return 0;
}
return 1;
}
このプログラムを参考にさせていただいとところ
文字列の判定もできました。
ありがとうございました。