关于猜数字游戏函数实现部分的一个小问题

猜数字游戏函数实现部分
代码如下:

void game()
{
    int a = 0;
    srand(time(NULL));
    int ans = (rand())%100+1;
    while (1)
    {
        printf("请输入你要猜的数字:>");
        scanf("%d", &a);
        if (a>0&&a<100)
        {
            if (a > ans)
            {
                printf("猜大了\n");
            }
            else if (a < ans)
            {
                printf("猜小了\n");
            }
            else if (a == ans)
            {
                printf("猜对了\n");
                break;
            }
        }
        else
        {
            printf("输入错误\n");
        }    
    }
}

如果在scanf处错误输入一个字母 a ,程序会提示输入错误,并且下一次循环到scanf的时候不会停下来等待输入,而是会进入死循环,
循环输出:请输入你要猜的数字:>输入错误\n ,通过监视看到a的值变为了0.
求解答为什么scanf那里不会停下来?
还有输入一个a为什么会导致a被赋值成0?


#include<stdio.h>

int main()
{
    int a = 0;
    srand(time(NULL));
    int ans = (rand())%100+1;
    while (1)
    {
        printf("请输入你要猜的数字:>");
        scanf("%d", &a);
        if (a>0&&a<100)
        {
            if (a > ans)
            {
                printf("猜大了\n");
            }
            else if (a < ans)
            {
                printf("猜小了\n");
            }
            else if (a == ans)
            {
                printf("猜对了\n");
                break;
            }
        }
        else
        {
            printf("输入错误\n");
        }    
    }
} 

img