C言語関係掲示板

過去ログ

No.460.数値以外の入力をエラー表示したい

[戻る] [ホームページ]
No.3313

数値以外の入力をエラー表示したいです。
投稿者---さかぶ(2002/11/03 20:47:11)


始めまして、さかぶといいます。
数値の入力受付範囲外の数値のエラー表示方法は、どうにかわかるのですが
数値以外の文字を入力すると以下のprintf文が止まりません。
数値以外の文字を入力をした場合に、printf文を表示し、また、繰り返すやり方を教えてください。
<pre>
for(;;){
scanf("%d",&i);
if((i<=0)||(i>5)){
printf("1から5までの数値を入力してください\n");
}else{
break;
}
}
</pre>

No.3318

Re:数値以外の入力をエラー表示したいです。
投稿者---eripong(2002/11/04 01:00:10)


scanfは正しく代入された入力項目の数を返すので,返り値によって判定できると思います。

No.3320

Re:数値以外の入力をエラー表示したいです。
投稿者---さかぶ(2002/11/04 09:27:29)


>scanfは正しく代入された入力項目の数を返すので,返り値によって判定できると思います。

eripongさん、ありがとうございました。
調べてみます。

No.3363

Re:数値以外の入力をエラー表示したいです。
投稿者---さかぶ(2002/11/07 19:47:15)


>>scanfは正しく代入された入力項目の数を返すので,返り値によって判定できると思います。
>
>eripongさん、ありがとうございました。
>調べてみます。

調べた結果、scanfは返り値によって判定できることは解かっていろいろ
試してみたのですが未だに解決できません。
for(;;){
printf(">>>");
scanf("%d", &i);
s=i%2;
if((i<0)||(i>24)||(s !=0)){
printf("エラー!\n");
}else if(i>=0){
printf("OK\n");
s=0;
break;
}else{
break;
}
}
数値以外の文字や記号が入力された場合printf("エラー!\n");の
部分が止まりません。具体的に教えてもらえれば助かります。

No.3369

Re:数値以外の入力をエラー表示したいです。
投稿者---aki(2002/11/07 23:10:12)


scanf関数は読み取ろうとした文字が変換指定とマッチしない場合、その
文字を読み取られずにストリームに残します。この状態でもう一度scanf
を呼び出すと、またその残された文字を読み取ろうとして失敗を繰り返し
ます。

そこで、次のようにストリームに残された文字を読み捨ててしまえばうま
くいきます。

#include <stdio.h>

int main(void)
{
    int i;

    for(;;){
        if (scanf("%d",&i) == 1) {
            if ((i <= 0) || (i > 5)) {
                printf("1から5までの数値を入力してください\n");
            }else{
                break;
            }
        } else {
            printf("数字を入力してください\n");
        }
        while (getchar() != '\n')       /* 改行までを読み捨てる */
                ;
    }
    return 0;
}

fgets関数で入力1行分ををいったん配列に読みとり、その配列からsscanf
関数を使って読み取る、という方法もあります。これなら読み捨ては不要
です。

#include <stdio.h>

#define BUFFER_SIZE 512

int prompt(void)
{
    char buf[BUFFER_SIZE];
    int i;

    for (;;) {
        if (fgets(buf, sizeof buf, stdin) == NULL)
            continue;
        if (sscanf(buf, "%d", &i) == 1) {
            if (1 <= i &&  i <= 5)
                return i;
            printf("1から5までの数値を入力してください\n");
        } else {
            printf("数字を入力してください\n");
        }
    }
}

int main(void)
{
    printf("input = %d\n", prompt());
    return 0;
}


No.3386

Re:数値以外の入力をエラー表示したいです。
投稿者---さかぶ(2002/11/08 21:49:33)


akiさん、こんなに丁寧な説明ありがとうございました。
助かりました。しかも、勉強になりました。