2016-05-01 8 views
1

このコードでは、ユーザーが正しく入力したかどうかを確認しようとしています。私は整数値を与えるとき....プログラムが完全に動作し、"done "が画面に印刷されますが、私は、このような"a"として文字を与えたときに、それは無限ループに入り、再びません入力に値を行うユーザーが入力した値を確認する

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    int i; 
    printf("Enter an integer: "); 
    while(!scanf("%d",&i)) 
    { 
     printf("no "); 
    } 
    printf("done\n"); 
    return 0; 
} 

OUTPUT 1:

Enter an integer: 5 
done 

OUTPUT 2:

Enter an integet: a 
no no no no no no no no no no no no....upto infinite times 
あなたはbefoそれを消費する必要が
+0

「a」は文字ではなく文字列です。 – Olaf

+0

私は段落に違いがあることを明確にするために "a"を書いた... –

+0

私はそれを疑ったが、これは絶対初心者でも読まれている。 markdownのコードタグは、通常、あなたが文字通り何かを入力するためのものです。したがって、 'a'で十分です(サンプルセッションと組み合わせて)。 – Olaf

答えて

2

何ストリームに残っている消費することができませんでした、ので、もう一度読もうとしています。

#include<stdio.h> 
#include<stdlib.h> 
int main(void) 
{ 
    int i; 
    printf("Enter an integer: "); 
    while(!scanf("%d",&i)) 
    { 
     scanf("%*s"); /* add this line to consume the garbage on the stream */ 
     printf("no "); 
    } 
    printf("done\n"); 
    return 0; 
} 
関連する問題